我正在尝试创建静态对象map<string, base*>
的地图,其中base
由类class1
和class2
派生。我的地图将存储指向class1
和class2
类型的对象的指针。
在阅读了几篇文章后,我决定通过创建一个带有静态类函数的单例来初始化地图:
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。
编辑: 将代码更改为:
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.
答案 0 :(得分:0)
myMap是A的成员,您需要相应地解决它。
A::myMap["1"]->func();
答案 1 :(得分:0)
您应该在课程后添加map<string, base*> A::myMap;
行。
你还应该避免你的map对象的const声明,而create_map()方法缺少一个return语句
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 map<string, base*> myMap;
};
map<string, base*> A::myMap;
int main() {
A::myMap = A::create_map();
A::myMap["1"]->func();
return 0;
}