3

これをコンパイルするのに苦労しています。静的変数に関係していると思いますが、何をしているのか100%確信が持てません。これが私が得続けるエラーメッセージです:

アーキテクチャ x86_64 の未定義シンボル: "Counter::nCounters"、次から参照: main.o の Counter::Counter(int, int)

main.o の Counter::getNCounters()

Counter::Counter.o の Counter(int, int)

Counter::getNCounters() in Counter.o

ld: アーキテクチャ x86_64 のシンボルが見つかりません

clang: エラー: リンカー コマンドが終了コード 1 で失敗しました (呼び出しを確認するには -v を使用してください)

ヘッダーファイルは次のとおりです。

#ifndef project1_Counter_h
#define project1_Counter_h

class Counter
{
private:
int counter;
int limit;
static int nCounters;

public:
Counter(int, int);
void increment();
void decrement();
int getValue();
static int getNCounters();
};

#endif

.cpp ファイルは次のとおりです。

#include "Counter.h"

Counter::Counter(int a, int b)
{
counter = a;
limit = b;
nCounters++;
}

void Counter::increment()
{
if (counter < limit)
    counter++;
}

void Counter::decrement()
{
if (counter > 0)
    counter--;
}

int Counter::getValue()
{
return counter;
}

int Counter::getNCounters()
{    
return nCounters;
}

また、main.cpp は単純な Hello World プログラムです。どんな助けでも大歓迎です。

4

1 に答える 1

6

nCounters を値で初期化する必要があると思います。

追加してみる

int Counter::nCounters = 0;

クラス外のどこかで、または次のように初期化します。

static int nCounters = 0;

代わりは。

于 2012-10-19T05:25:32.410 に答える