通过非静态方法访问静态成员

时间:2012-05-16 16:46:27

标签: c++

这一定是非常微不足道的,但我找不到它:

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

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

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

2 个答案:

答案 0 :(得分:9)

您需要定义静态:

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

int Test::n = 0;

请注意,定义必须出现在实现文件中,而不是标题中,否则会出现多重定义错误。

答案 1 :(得分:3)

您需要定义静态数据成员(不一定初始化它)。它将自动初始化为0。我想你得到了一个链接器错误。这是因为由于缺少定义,因此尚未分配数据成员。这与它的价值无关。