C ++在构造函数中向地图添加“self”

问题描述 投票:-1回答:1

我是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;
            }
    };

}

任何帮助,将不胜感激

c++
1个回答
1
投票

只需先定义类,然后声明变量,然后定义函数:

class Doodad
{
    public:
        Doodad(std::string);
};

inline std::map<std::string, Doodad> testMap;

Doodad::Doodad(std::string) {
    testMap.emplace("qwe", *this);
}

附: this是一个指针,因此您无法将其添加到值不是指针的地图中。此外,你不能使用地图的operator[],因为Doodad不是默认的可构造的。

© www.soinside.com 2019 - 2024. All rights reserved.