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

嗨,我在以下代码中得到未定义的参考错误:

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

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

124324 次浏览

我不需要 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;
};

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

int Helloworld::x;

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

老问题了,但是

因为 c++17可以声明 static成员 inline并在 class的主体内实例化它们,而不需要 out-of-class定义:

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