C++初始化对象的静态映射
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
。有人可以解释单例方法以及我做错了什么吗?如果我有一个单独的头文件,这将如何变化?
蒂亚。
编辑:将代码更改为:
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.
您应该在类之后添加行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;
}
myMap 是 A 的成员,你需要相应地解决它。
A::myMap["1"]->func();
相关文章:
- 初始化之前使用的静态映射
- 值和类型的简洁双向静态 1:1 映射
- 如果包含映射的静态库与可执行文件和动态库链接,静态映射(变量)是否会被多次释放?
- 线程时访问静态映射时出现隔离错误
- 具有不同参数列表的模板对象的模板静态映射
- 静态映射超出堆栈
- C++ 已停止工作静态映射函数
- 我们如何在模板类中使用静态映射,模板类的每个实例化都应该使用相同的映射
- 如何从 C++ 中的单独类访问静态映射?
- 在 C++ 中使用静态映射的奇怪问题
- C++初始化对象的静态映射
- 使用静态映射在C++中缓存数据的推荐方法是什么
- C++中的静态映射
- 静态映射中动态分配的对象.删除必要的
- 静态映射初始化
- (VS2015)正在尝试用初始值设定项列表中的数据填充静态映射
- C++模板静态映射初始化
- 检查 C++ 中的空静态映射变量
- 静态映射为C++中的类成员
- 在不同函数内的类中使用静态映射: