相关疑难解决方法(0)

填充std :: map时,"C2593:operator = is ambiguous"

我有一个std::map我正在尝试初始化初始化列表.我在两个地方以两种不同的方式做到这一点.第一个工作,而另一个工作导致标题中提到的错误.

这是有效的:

void foo() {
    static std::map<std::string, std::string> fooMap =
    {
        { "First", "ABC" },
        { "Second", "DEF" }
    };
}
Run Code Online (Sandbox Code Playgroud)

虽然这个没有:

class Bar {
    public:
        Bar();
    private:
        std::map<std::string, std::string> barMap;
};

Bar::Bar() {
    barMap = { // <-- this is the error line
        { "First", "ABC" },
        { "Second", "DEF" }
    };
}
Run Code Online (Sandbox Code Playgroud)

为什么在尝试初始化类成员时会出现错误,而静态映射有效?目前,我可以通过首先创建一个局部变量然后将其与成员交换来填充成员,如下所示:

Bar::Bar() {
    std::map<std::string, std::string> tmpMap = {
        { "First", "ABC" },
        { "Second", "DEF" }
    };

    barMap.swap(tmpMap);
}
Run Code Online (Sandbox Code Playgroud)

然而,与直接填充成员相比,这感觉相当反直觉.


编辑:这是编译器输出.

c++ c++11

7
推荐指数
1
解决办法
1353
查看次数

标签 统计

c++ ×1

c++11 ×1