このようなクラス/構造がある場合
// header file
class Foo
{
public:
static int bar;
int baz;
int adder();
};
// implementation
int Foo::adder()
{
return baz + bar;
}
これは機能しません。 「 `Foo :: bar 'への未定義の参照」エラーが発生します。 C++で静的クラス変数にアクセスするにはどうすればよいですか?
implementationファイルに次の行を追加する必要があります。
int Foo::bar = you_initial_value_here;
これは、コンパイラーが静的変数の場所を確保するために必要です。
正しい構文ですが、Foo::bar
は、ヘッダーの外側で個別に定義する必要があります。 .cpp
ファイル、これを言う:
int Foo::bar = 0; // or whatever value you want
行を追加する必要があります:
int Foo::bar;
それはあなたにストレージを定義します。クラスでのstaticの定義は「extern」に似ています-シンボルを提供しますが、作成しません。すなわち
foo.h
class Foo {
static int bar;
int adder();
};
foo.cpp
int Foo::bar=0;
int Foo::adder() { ... }
クラスで静的変数を使用するには、まず一般に(ローカルではなく)静的変数に値を指定(初期化)する必要があります。その後、クラスの静的メンバーにアクセスできます。
class Foo
{
public:
static int bar;
int baz;
int adder();
};
int Foo::bar = 0;
// implementation
int Foo::adder()
{
return baz + bar;
}