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 に答える