3

これは非常に些細なことであるに違いありませんが、私はそれを見つけることができません:

struct Test {
  static int n;
  void Save(int val) {
    Test::n = val;
  }
};

int main() {
  Test t;
  t.Save(2);
  return 0;
}

Test::n4行目に未定義の参照があるのはなぜですか?

4

2 に答える 2

9

静的を定義する必要があります:

struct Test {
  static int n;
  void Save(int val) {
    Test::n = val;
  }
};

int Test::n = 0;

定義はヘッダーではなく実装ファイルに表示される必要があることに注意してください。そうしないと、複数定義エラーが発生します。

于 2012-05-16T16:47:16.183 に答える
3

静的データメンバーを定義する必要があります(必ずしも初期化する必要はありません)。自動的に0に初期化されます。リンカーエラーが発生していると思います。これは、定義が欠落しているため、データメンバーが割り当てられていないためです。これはその価値とは何の関係もありません。

于 2012-05-16T16:49:27.050 に答える