言語 C++ で与えられたコード
/* file xxx.hpp */
class A
{
};
class B
{
private:
class C
{
static const A a;
};
};
A a
ネストされたクラス C で静的定数メンバー変数を初期化するにはどうすればよいですか?
言語 C++ で与えられたコード
/* file xxx.hpp */
class A
{
};
class B
{
private:
class C
{
static const A a;
};
};
A a
ネストされたクラス C で静的定数メンバー変数を初期化するにはどうすればよいですか?
以下を 1 つだけに追加します.cpp
。
const A B::C::a;
投稿されたコードは単なる宣言であることに注意してください。これは実際の定義と初期化です。
コンパイルするコードを含む cpp ファイルに、const A B::C::a = {};
. 初期化子 (POD クラスまたは集約型の {...} 内の初期化子リスト、または組み込み型の単一の定数値) はオプションです。指定されていない場合は、デフォルトのコンストラクターが呼び出されa
ます。プリミティブ型の場合は、0 に設定する必要があります。
更新しました:
David が以下で大きく指摘しているように、一部のコンパイラは、静的メンバ定義に初期化子が指定されていない場合に警告を発行します。にいくつかのデータ メンバーがclass A
あり、の定義中に初期化子a
が指定されていない場合、私の g++ 4.6.3 コンパイラは次の警告を発行します (つまり、既定ではエラーとして扱われます)。
test.cpp:26:9: エラー: 初期化されていない const 'B::C::a' [-fpermissive]
test.cpp:6:7: 注: 'const class A' にはユーザー指定のデフォルトがありません
コンストラクター test.cpp:11:8: 注: 暗黙的に定義されたコンストラクターは 'int A::test' を初期化しません</p>
static
レギュラーメンバーと同じように。
実装ファイルで:
const A B::C::a;
静的メンバー変数の初期化は、常に変数の定義で実行されます。これは、プログラム内の単一の翻訳単位にある必要があります。
const A B::C::a = {};
ソース ファイル (xxx.cpp) で、次の変数を定義します。
const A B::C::a;