未定义对静态变量C ++的引用


Answers:


114

我不要static foo()功能

那么,foo()不是在你的类静态的,你就不会需要使它static以访问static类的变量。

您要做的只是为静态成员变量提供一个定义

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;
};

3
非常感谢。我正在实例化HelloWorld :: x,但没有使用int实例化。再次感谢。
Aqeel Raza

@AndyProwl我尝试了此操作,并在将x设置为0的行上出现编译器错误。它在“类Helloworld”中说“ foo”没有命名类型。有什么建议吗?
ufmike

57

代码正确,但是不完整。该类Helloworld具有其静态数据成员的声明x,但没有该数据成员的定义。在您需要的源代码中

int Helloworld::x;

或者,如果0不是适当的初始值,则添加一个初始化程序。


6

旧问题,但要添加c++17功能;

既然c++17可以声明static members inline并且可以用的initializer内部主体定义class。不需要out-of-class定义;

class Helloworld{
  public:
     inline static int x = 10;
     void foo();
};
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.