[英]Can non-static member function access static member function or data?
我在互联网上搜索后发现,有人说非静态成员函数可以访问静态成员函数或数据。 然后我编写了一个程序来验证它。
#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
在类内部将变量声明为static
只是一个声明。
您还需要定义变量,这意味着将这一行添加到单个编译单元中:
int test::a = 0;
更准确地说:编译单元基本上是一个.cpp文件。 你不应该直接放在该行的头文件,否则你会得到相反的错误:“多重定义...”。
如您所料,这也将在程序启动后将变量初始化为0
。
如果将此行放在类声明下,它将解决您的问题(在这种特定情况下:请记住不要将其写在头文件中)。
那是因为您只声明了test::a
,而没有定义它:
#include <iostream>
class test
{
...
};
int test::a = 1; //Needs a definition!
您必须定义静态数据成员实例。 添加一行...
int test::a;
...在main()
之上或main()
...基本上在与class test
相同的名称空间范围内以及在class test
的定义之后的任何位置。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.