无法从 '<brace-enclosed initializer list> 转换为

Posted

技术标签:

【中文标题】无法从 \'<brace-enclosed initializer list> 转换为【英文标题】:Could not convert from '<brace-enclosed initializer list> to无法从 '<brace-enclosed initializer list> 转换为 【发布时间】:2014-02-21 18:08:33 【问题描述】:

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

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

错误:无法将 '"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

谢谢大家。

【问题讨论】:

A 的字符串文字是两个用户定义的转换,因此不会隐式工作。 是的,你是对的,我刚刚尝试删除“bar”并放入 std::string("bar") 并且它有效。您对这项工作有两种解决方案吗? 您可以重载A 的构造函数,该构造函数接受const char * 并委托给另一个。 structclass 之间的唯一区别是默认访问权限:publicprivate。 (事实上​​,我唯一一次使用 class 关键字是使用模板模板参数。)你是说聚合还是非聚合? 您可以使用struct 获得与class 相同的封装。如果您要做的第一件事是将public: 放在顶部,那么实际上并没有任何有效的区别。 【参考方案1】:

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

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

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

【讨论】:

以上是关于无法从 '<brace-enclosed initializer list> 转换为的主要内容,如果未能解决你的问题,请参考以下文章

错误:没有匹配函数调用 'std::vector<Pet*>::vector(<brace-enclosed initializer list>)'

正确的线程调用语法?错误:没有匹配的调用 std::thread::thread(<brace-enclosed initializer list>)

用c程序如何对从键盘输入的3个数进行从大到小的排列,谢谢大侠!

java ,为啥无法从静态上下文中引用非静态方法

无法将值从一个意图传递到另一个意图

我无法从 firebase 操作存储在数组中的数据