98

嗨,我在以下代码中收到未定义的引用错误:

class Helloworld{
  public:
     static int x;
     void foo();
};
void Helloworld::foo(){
     Helloworld::x = 10;
};

我不想要一个static foo()函数。如何static在类的非static方法中访问类的变量?

4

3 回答 3

137

我不想要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;
};
于 2013-04-29T17:25:10.070 回答
69

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

int Helloworld::x;

或者,如果 0 不是适当的初始值,则添加一个初始值设定项。

于 2013-04-29T17:25:43.583 回答
30

老问题,但是;

由于您可以在不需要定义的情况下c++17声明static成员inline并在内部实例化它们:classout-of-class

class Helloworld{
  public:
     inline static int x = 10;
     void foo();
};
于 2020-07-15T13:21:46.970 回答