web-dev-qa-db-ja.com

静的変数c ++への未定義の参照

こんにちは、次のコードで未定義の参照エラーが発生しています:

_class Helloworld{
  public:
     static int x;
     void foo();
};
void Helloworld::foo(){
     Helloworld::x = 10;
};
_

staticfoo()関数は必要ありません。クラスのstaticメソッド以外のクラスのstatic変数にアクセスするにはどうすればよいですか?

56
Aqeel Raza

staticfoo()関数が必要ない

さて、foo()notクラス内で静的であり、あなたはnotstaticにアクセスしてstaticクラスの変数。

行う必要があるのは、静的メンバー変数にdefinitionを指定するだけです。

class Helloworld {
  public:
     static int x;
     void foo();
};

int Helloworld::x = 0; // Or whatever is the most appropriate value
                       // for initializing x. Notice, that the
                       // initializer is not required: if absent,
                       // x will be zero-initialized.

void Helloworld::foo() {
     Helloworld::x = 10;
};
85
Andy Prowl

コードは正しいですが、不完全です。クラスHelloworldには、その静的データメンバーxの-​​宣言がありますが、そのデータメンバーの定義はありません。あなたが必要とするソースコードの中に

int Helloworld::x;

または、0が適切な初期値でない場合は、初期化子を追加します。

48
Pete Becker