3

这一定很琐碎,但我找不到:

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

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

为什么在第 4 行有未定义的引用Test::n

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 回答