2014-02-21 44 views
0

我知道有很多类似的问题,但我看到它们,没有一个对我有帮助,我认为是因为我有点不同,而且在同一时间很奇怪。无法从'<大括号包含的初始化程序列表>转换为

我提出了另一个问题,一位成员回答了我的问题,而不是使用他使用结构的类。它的工作很好,但是当我试图把它当作类,使用相同的逻辑,这是发生什么事,错误:

error: could not convert '{{"foo", "bar"}}' from '' to '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

谢谢大家。

+4

一字符串文字到“A”是两个用户定义的转换,所以这不会隐式工作。 – chris

+0

是的,你是对的,我只是尝试删除“酒吧”,并把std :: string(“酒吧”),它的工作。你有两种方式解决这项工作吗? –

+3

您可以重载'A'的构造函数,它接受'const char *'并委托给另一个构造函数。 – chris

回答

3

您必须初始化 'B' 是这样的:

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

因为{ “富”, “酒吧”}是不是类型{字符串,字符串}的{串,A}

+0

它也行得通,谢谢。 –

相关问题