我搜索了互联网,发现有人说非静态成员函数可以访问静态成员函数或数据.然后我写了一个程序来验证它.
#include <iostream>
class test
{
public:
static int a;
void printa()
{
std::cout<<a;
}
};
int main(int argc, const char * argv[])
{
test m;
m.printa();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
代码生成链接器错误!
Undefined symbols for architecture x86_64:
"test::a", referenced from:
test::printa() in main.o
Run Code Online (Sandbox Code Playgroud)
将变量声明为static类内部只是一个声明.
您还需要定义变量,这意味着在单个编译单元中添加此行:
int test::a = 0;
更确切地说:编译单元基本上是.cpp文件.你应该不是直接把该行的头文件,否则你会得到相反的错误:"多重定义...".
正如您所猜测的那样,这也将0在您的程序启动后初始化您的变量.
如果你把这一行放在你的类声明之下,它将解决你的问题(在这种特定的情况下:记住不要在头文件中写这个).