#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;
}
代码生成链接器错误!
Undefined symbols for architecture x86_64:
"test::a", referenced from:
test::printa() in main.o
答案 0 :(得分:8)
在一个类中声明一个变量为static
,嗯,只有 一个声明。
您还需要定义变量,这意味着在单个编译单元中添加此行:
int test::a = 0;
更确切地说:编译单元基本上是.cpp文件。您应该不将该行直接放在头文件中,否则您将得到相反的错误:&#34;多个定义...&#34;。
正如您所猜测的那样,一旦您的程序启动,这也会将您的变量初始化为0
。
如果你把这一行放在你的类声明之下,它将解决你的问题(在这种特殊情况下:记住不要在头文件中写这个)。
答案 1 :(得分:2)
那是因为你只声明了test::a
,没有定义它:
#include <iostream>
class test
{
...
};
int test::a = 1; //Needs a definition!
答案 2 :(得分:1)
答案 3 :(得分:0)
您必须定义静态数据成员实例。添加一行......
int test::a;
...高于main()
,或main()
下...基本上在与class test
相同的命名空间范围内和class test
定义之后的任何地方。