无法从"<大括号括起来的初始值设定项列表>转换为

Could not convert from '<brace-enclosed initializer list> to

本文关键字:列表 转换 gt 起来 lt      更新时间:2023-10-16

我知道有很多类似的问题,但我看到了它们,但没有一个帮助我,我认为这是因为我的有点不同,同时又很奇怪。

提出了另一个问题,一个成员回答了我,但他没有使用类,而是使用了结构体。 它运行良好,但是当我尝试使用相同的逻辑将其作为类时,就会发生这种情况,错误:

错误:无法将"{{"foo"、"bar"}}"从"<大括号括起来的初始值设定项列表>"转换为"B"

我试过了,但我不知道发生了什么。

#include <iostream>
#include <map>
class A
{
public:
    A() {}
    A(const std::string & input) : data(input) {}
private:
    std::string data;
};
class B
{
public:
    B();
    B(std::initializer_list<std::pair<std::string, A>> input) : container(begin(input), end(input)) {}
private:
    std::map<std::string, A> container;
};
int main( int argc, char ** argv )
{
    B b = {
        {"foo", "bar"}
    };
    return 0;
}

还有这里成员的答案:Ideone

谢谢大家。

你必须像这样初始化'b':

B b = {
    { "foo", A{"bar"} }
};

因为 {"foo", "bar"} 的类型是 {string, string} 而不是 {string, A}