2013-03-12 48 views
6

こんにちはIAM begginer ++私は、静的メソッドを持つクラスを持っていると私はそれが私のコードC++未解決の外部シンボルCで

1>------ Build started: Project: CPractice, Configuration: Debug Win32 ------ 
1> Source.cpp 
1>Source.obj : error LNK2001: unresolved external symbol "private: static class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > CPractice::name" ([email protected]@@[email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@A) 
1>c:\users\innersoft\documents\visual studio 2012\Projects\CPractice\Debug\CPractice.exe : fatal error LNK1120: 1 unresolved externals 
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== 

、ここで私はエラーをスローでそれらにアクセスカント

#include <iostream> 
#include <stdio.h> 
#include <cstdlib> 
#include <string> 

using namespace std; 

class CPractice 
{ 
    public: 
     static void setName(string s) 
     { 
      name = s; 
     } 
     static string getName() 
     { 
      return name; 
     } 
    private: 
     static string name; 
}; 


int main() 
{ 


    CPractice::setName("Name"); 
    cout << "\n" << CPractice::getName(); 
    system("PAUSE"); 
    return EXIT_SUCCESS; 
} 

答えて

18
static string name; 

staticのように、この行のみnameと宣言しています。定義する必要もあります。あなたは、対応するヘッダーと実装ファイルにクラスを移動してしまう場合は、実装ファイルで、この定義を置くことを確認してください

string CPractice::name; 

:単にあなたのクラス定義以下、これを置きます。 1つの翻訳単位でのみ定義する必要があります。

+0

は、私はそれを宣言したときに出回っ定義されていることを考えました。その作品、ありがとうございます –

+1

@SilvioMarijic人々がよくある間違いです。それが定義ではない理由は、複数の定義を避けることです。それが定義であって、それが他の多くのファイルに入っているヘッダーを含めると、同じ静的メンバーの複数の定義があります。とにかく、あなたを最も助けてくれた答えを受け入れることによって、感謝を言うことを忘れないでください。 –

1

g++でコンパイルする必要があるときは、gccとコンパイルしようとしていると思います。詳しくは、What is the difference between g++ and gcc?を参照してください。

さらに、クラス定義の下にstring CPractice::name;を追加する必要があります。あなたが唯一のクラスでnameを宣言

1

、静的変数は、クラスの外でそのように定義する必要があります

string CPractice::name ="hello" ; 
1

名は、あなたがそれを初期化:)と数えるべきではありません静的データメンバであるので、デフォルトのインスタンス関連のコンストラクタで(あなたのメンバーがプライベート1であるので、うん、私はその混乱を知っているが、これは唯一の初期化である)

は、クラス定義の後にこれを追加します。

string CPractice::name; 
関連する問題