繁体   English   中英

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

[英]C++ initialize static map of objects

我正在尝试创建静态对象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.

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM