web-dev-qa-db-ja.com

C ++で静的クラス変数にアクセスしますか?

重複:
C++:静的クラスメンバーへの未定義の参照

このようなクラス/構造がある場合

// header file
class Foo
{
   public:
   static int bar;
   int baz;
   int adder();
};

// implementation
int Foo::adder()
{
   return baz + bar;
}

これは機能しません。 「 `Foo :: bar 'への未定義の参照」エラーが発生します。 C++で静的クラス変数にアクセスするにはどうすればよいですか?

27
Paul Wicks

implementationファイルに次の行を追加する必要があります。

int Foo::bar = you_initial_value_here;

これは、コンパイラーが静的変数の場所を確保するために必要です。

59
Drakosha

正しい構文ですが、Foo::barは、ヘッダーの外側で個別に定義する必要があります。 .cppファイル、これを言う:

int Foo::bar = 0;  // or whatever value you want
16

行を追加する必要があります:

int Foo::bar;

それはあなたにストレージを定義します。クラスでのstaticの定義は「extern」に似ています-シンボルを提供しますが、作成しません。すなわち

foo.h

class Foo {
    static int bar;
    int adder();
};

foo.cpp

int Foo::bar=0;
int Foo::adder() { ... }
15
Artyom

クラスで静的変数を使用するには、まず一般に(ローカルではなく)静的変数に値を指定(初期化)する必要があります。その後、クラスの静的メンバーにアクセスできます。

class Foo
{
   public:
   static int bar;
   int baz;
   int adder();
};

int Foo::bar = 0;
// implementation
int Foo::adder()
{
   return baz + bar;
}
1
BattleTested