- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:templateのmap処理でエラー)
templateのmap処理でエラー
このQ&Aのポイント
- C++のTemplateを勉強中です。Parentクラス内でChildクラスを管理している際に、map処理でエラーが発生しています。具体的には、Parentクラス内でChildクラスのポインタとIDを保持するためにSTLのmapを使用していますが、m_Mapをstaticにするとエラーが発生します。エラーの詳細についても説明しています。
- エラーの内容は、「undefined reference to `Parent<Child>::m_Map'」です。このエラーは、m_Mapをstaticにすると発生するものであり、Singletonとして動作させるためには一元管理するmapをstaticにしたいと述べています。
- 対処方法としては、m_Mapをstaticにする理由やエラーを解消する方法についての質問をしています。具体的なコードやエラーメッセージを示していますので、詳しい方にお答えいただけることを求めています。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
テンプレートクラスでなく普通のクラスであっても、static メンバ変数はクラス定義の外側で実体を定義する必要があることはお分かりでしょうか? 同様に、このテンプレートクラスの場合も、クラス定義の外側でstaticメンバ変数の実体を定義する必要があります。 template <typename T> map<int, T*> Parent<T>::m_Map;
その他の回答 (1)
- Tacosan
- ベストアンサー率23% (3656/15482)
回答No.1
その m_Map って, どこで実体を定義してるの?
質問者
お礼
実体の定義についてヒントを頂きありがとうございました。
質問者
補足
お読みいただきありがとうございます。 ちなみに実体をどのように定義したらよいかでも悩んでおります。 最初は static map<int, T*> m_Map; の下あたりに Parent<Child>::m_Map; とかを入れればいけるかな?と思っていたのですが うまくいきませんでした・・・
お礼
定義が必要なのは理解していたのですが、教えて頂いた分の右半分しかなく、 いじくりまわしてはエラーの連続でした。 いただいた分を追加することで通るようになりました。 ありがとうございました。