0

我写了一个类,如下所示:

#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'

我无法理解错误是什么......请帮助......

4

2 回答 2

3

未定义静态字段- 看看为什么具有静态数据成员的类会出现链接器错误?.

#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;
}
于 2012-08-25T03:25:38.803 回答
1

类里面static int cnt;只有声明的,需要定义的。在 C++ 中,您通常在 .h .hpp 文件中声明,然后在 .c 和 .cpp 文件中定义静态类成员。

在您的情况下,您需要添加

int A::cnt=0; // = 0 Would be better, otherwise you're accessing an uninitialized variable.
于 2012-08-25T03:38:20.447 回答