map<string, base*>
のbase
がクラスclass1
とclass2
によって派生した静的オブジェクトのマップを作成しようとしています。私のマップは、タイプclass1
とclass2
のオブジェクトへのポインタを格納します。 C++は静的オブジェクトのマップを初期化します
class A { // singleton class
public:
static map<string, base*> create_map() {
map<string,base*> m;
m["1"]=new class1();
m["2"]=new class2();
};
static const map<string, base*> myMap;
};
int main() {
const map<string,base*> A::myMap = A::create_map();
myMap["1"]->func();
}
ただし、これはエラーを与える:myMap is not declared in this scope
。誰かがシングルトンの方法と私が間違っていることを説明できますか?ヘッダーファイルが別の場合、これはどのように変更されますか?
TIA。
EDIT: はにコードを変更:
class A { // singleton class
public:
static map<string, base*> create_map() {
map<string,base*> m;
m["1"]=new class1();
m["2"]=new class2();
return m;
};
static const map<string, base*> myMap;
};
const map<string,base*> A::myMap = A::create_map();
int main() {
A::myMap["1"]->func();
}
これはまだエラーを与える:passing const std::map<std::basic_string<char>, base*> as 'this' discards qualifiers.
の欠けていた:なぜあなたは1が必要なのでしょうか?単にあなたの関数を一度呼び出すだけで(そしてマップへの参照を渡すと)どうでしょうか? – Darhuuk
create_map()はmapを返します。何も返さない...何か不足していますか?ここで 'm'はスタック上で宣言され、' create_maps'スコープの終わりで破棄されます –
また、 'create_map'関数は作成されたマップを返しません。 2.生ポインタを使用しているため、メモリがリークしています。 'std :: unique_ptr'を使うとそれを解決できます。おそらく、プログラムが終了するとリークが発生するので、ここでも悪くないので、OSはそれをクリーンアップします。 – Darhuuk