我是C ++的新手,有些困惑。我正在尝试在类初始化时将数据添加到std::map
中,但是要注意的是我正在尝试添加要创建的类的实例。
示例:
namespace Test
{
inline std::map<std::string, Doodad> testMap;
class Doodad
{
public:
Doodad(std::string test)
{
testMap["qwe"] = this;
}
};
}
现在这显然不起作用,因为Doodad
尚未定义,所以我尝试了一些更hacky(可能是一个可怕,可怕的想法,但是我只是在玩弄它并学习如何一切正常)。
namespace Test
{
class Hack
{
public:
Hack() {};
};
inline std::map<std::string, Hack> testMap;
class Doodad: public Hack
{
public:
Doodad(std::string test) : Hack()
{
testMap["qwe"] = this;
}
};
}
任何帮助将不胜感激
答案 0 :(得分:1)
首先定义类,然后声明变量,然后定义函数:
class Doodad
{
public:
Doodad(std::string);
};
inline std::map<std::string, Doodad> testMap;
Doodad::Doodad(std::string) {
testMap.emplace("qwe", *this);
}
P.S。 this
是一个指针,因此您不能将其添加到其值不是指针的映射中。此外,您无法使用地图的operator[]
,因为Doodad
无法默认构造。