嗨,我在以下代码中收到未定义的引用错误:
class Helloworld{
public:
static int x;
void foo();
};
void Helloworld::foo(){
Helloworld::x = 10;
};
我不想要一个static
foo()
函数。如何static
在类的非static
方法中访问类的变量?
我不想要
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
,但没有该数据成员的定义。Somehwe 在您的源代码中,您需要
int Helloworld::x;
或者,如果 0 不是适当的初始值,则添加一个初始值设定项。
老问题,但是;
由于您可以在不需要定义的情况下c++17
声明static
成员inline
并在内部实例化它们:class
out-of-class
class Helloworld{
public:
inline static int x = 10;
void foo();
};