[英]C++ initialize static map of objects
我正在尝试创建静态对象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.
myMap是A的成员,您需要相应地解决它。
A::myMap["1"]->func();
您应该添加线map<string, base*> A::myMap;
下课后。 您还应该避免地图对象的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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.