C ++初始化对象的静态映射

时间:2017-10-23 08:28:53

标签: c++

我正在尝试创建静态对象map<string, base*>的地图,其中base由类class1class2派生。我的地图将存储指向class1class2类型的对象的指针。

在阅读了几篇文章后,我决定通过创建一个带有静态类函数的单例来初始化地图:

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.

2 个答案:

答案 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;
}