static map
はprivate
データメンバーです。最初のコンテナが空であるように、実装ファイルでそれをどのように初期化するのですか? const
ではありません。このコンテナには何も入っていないことが重要です。空のプライベートマップを初期化する
std::map<T,T2> YourClass::YourMember = std::map<T,T2>();
static map
はprivate
データメンバーです。最初のコンテナが空であるように、実装ファイルでそれをどのように初期化するのですか? const
ではありません。このコンテナには何も入っていないことが重要です。空のプライベートマップを初期化する
std::map<T,T2> YourClass::YourMember = std::map<T,T2>();
ヘッダー:
class XXX {
private:
static std::map<X,Y> the_map; // declares static member
// ...
実装ファイル:
std::map<X,Y> XXX::the_map; // defines static member
マップのコンストラクタの呼び出しを挿入します。この(私が正しくあなたを理解している場合)について
方法あなたのプログラムの初期化コード(およびクリーンアップのデストラクタ)に追加します。しかし、注意してください - 異なる翻訳単位の間のこのような静的コンストラクタの順序は定義されていません。
または単に 'std :: map
@MikeSeymour:まさに。必要に応じてコンストラクタの引数を与えることができることを明確にします。 – Linuxios
あなたはクラス定義で定義する場合は、あなたが実装でそれを宣言する必要があります。
--- test.h ---
// includes and stuff...
class SomeClass
{
private:
static std::map<int,std::string> myMap;
};
--- test.cpp ---
std::map<int,std::string> SomeClass::myMap; // <-- initialize with the map's default c'tor
あなたも、初期設定を使用することができます:
std::map<int,std::string> SomeClass::myMap = std::map<int,std::string>(myComparator);
Nitpick:これはクラス内で/ declared /となり、実装では/ defined /となります。 – Grault
私のマップはプライベートなので、CCファイルの上部にあるデフォルトの初期化は無効です。 –
コードを投稿すると、あなたはどこかで間違いをしています。 –
私はtypedefを公開する必要がありましたが、メンバーを非公開にしました。それはそれを修正した。 –