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
谢谢大家。
一字符串文字到“A”是两个用户定义的转换,所以这不会隐式工作。 – chris
是的,你是对的,我只是尝试删除“酒吧”,并把std :: string(“酒吧”),它的工作。你有两种方式解决这项工作吗? –
您可以重载'A'的构造函数,它接受'const char *'并委托给另一个构造函数。 – chris