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

Jan*_*roň 3 c++

这一定非常简单,但我找不到:

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

int main() {
  Test t;
  t.Save(2);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

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

Luc*_*ore 9

您需要定义静态:

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

int Test::n = 0;
Run Code Online (Sandbox Code Playgroud)

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

  • +1但是OP的相关点是*定义*而不是初始化.特别是,C++ 11允许内联初始化,但定义仍必须在标题中. (4认同)
  • 对不起,我是一个java人,但我仍然不明白为什么你不能从非静态方法中为未初始化的静态赋值.他并没有试图读取价值. (3认同)
  • 开始输入较慢以给其他人一个机会:p 14秒太低而无法与之竞争. (2认同)