我写了一个如下所示的课程:
#include<iostream>
using namespace std;
class A
{
static int cnt;
static void inc()
{
cnt++;
}
int a;
public:
A(){ inc(); }
};
int main()
{
A d;
return 0;
}
我想通过构造函数调用函数inc,但是当我编译时出现错误:
/tmp/ccWR1moH.o: In function `A::inc()':
s.cpp:(.text._ZN1A3incEv[A::inc()]+0x6): undefined reference to `A::cnt'
s.cpp:(.text._ZN1A3incEv[A::inc()]+0xf): undefined reference to `A::cnt'
我无法理解错误是什么... plz help ...
答案 0 :(得分:3)
静态字段 未定义 - 请查看Why are classes with static data members getting linker errors?。
#include<iostream>
using namespace std;
class A
{
static int cnt;
static void inc(){
cnt++;
}
int a;
public:
A(){ inc(); }
};
int A::cnt; //<---- HERE
int main()
{
A d;
return 0;
}
答案 1 :(得分:1)
类static int cnt;
内部仅被声明,需要定义。在C ++中,您通常在.h .hpp文件中声明,然后在.c和.cpp文件中定义静态类成员。
在您的情况下,您需要添加
int A::cnt=0; // = 0 Would be better, otherwise you're accessing an uninitialized variable.