0

重複の可能性:
C++: 静的クラス メンバーへの未定義の参照

次の C++ コードは ( を使用してg++ -c) 適切にコンパイルされますが、リンクされず、エラーが発生します: undefined reference toAbc::X'`

#include <iostream>

using namespace std;

class Abc {

public:
    const static int X = 99;
};

int main()
{
    Abc a1;
    cout << &(Abc::X) << endl;
}

これが許可されていない理由を知りたいですか?

4

3 に答える 3

4

宣言するだけでなく、その静的メンバーを実際に定義する必要があります...

次の行を の前に追加しますmain()

const int Abc::X = 99;

C++17 以降では、インライン スタティックも実行できます。その場合、上記の .cpp ファイル内のコードの追加行は必要ありません。

class Abc {

public:
    inline const static int X = 99; // <-- "inline"
};
于 2012-07-15T07:15:26.053 に答える
1

静的メンバーが左辺値を必要とする方法 (つまり、アドレスを持つ必要がある方法) で使用される場合は、定義が必要です。標準への参照とその修正方法を含むGCC wikiの説明を参照してください。

于 2012-07-15T10:24:03.207 に答える
1

翻訳単位、静的初期化順序などについて考えたくない場合は、静的定数をメソッドに変更してください。

#include <iostream>
using namespace std;

class Abc {

public:
    inline static const int& X(){ 
      static int x=99;
      return x; 
    }
};

int main()
{
//    Abc a1;
    cout << &(Abc::X()) << endl;
}
于 2012-07-15T07:24:55.437 に答える