无法转换初始值设定项列表的第二个参数
Cannot convert the second argument of the initializer-list
标准说:(N3797::13.3.3.1/4 [over.best.ics]
)
但是,当考虑构造函数或 用户定义的转换函数,在 13.3.1.3 中是候选函数,当 在第二步中为复制/移动临时而调用 类复制初始化,传递初始值设定项时由 13.3.1.7 列表作为单个参数或当初始值设定项列表只有一个参数时 元素和对某些类
X
或引用的转换(可能 CV 合格)X
考虑用于构造函数的第一个参数X
,[...]只考虑标准转换序列和省略号转换序列。
也就是说,我们只在以下情况下关注第一个参数:
#include <iostream>
struct B;
struct C
{
C(){ }
C(const B&){ }
};
struct B
{
B(){ }
B(const C&){ }
};
struct A
{
A(const C&, const C&){ }
A(const B&){ }
};
B b;
C c;
A a{b, b};
int main(){ }
演示
它有效,尽管我提供了b
作为第一个参数,并且不应应用用户定义的转换B-->C
。
您有一个从B
到A
的转换,以及从C
到B
的转换,但您正在尝试从{B,C}
构造一个A
,并且没有该形式的构造函数。
但是现在你已经完全放弃了它。 :)
相关文章:
- 我有两个类需要在同一 cpp 文件中相互引用,但第一个类无法识别第二个类类型的对象
- 等待整个 omp 块完成,然后再调用第二个函数
- 我想在C++中读取一些多个字符,但它永远不会读取第二个字符
- 如何在创建自定义迭代器时获得 std::p air 的第一个和第二个?
- WinAPI 在单击第一个对话框上的按钮控件并销毁第一个对话框后创建第二个对话框
- 将第二个 GATT 服务添加到 Movesense 容器
- 如何在 c++ 中根据第二个元素按降序对列表进行排序
- 对的排序向量 (std::vector<pair<int, int>>) 按对的第一个元素搜索并更新第二个元素值
- 比较 2 个向量并从第二个向量中删除在第一个 - c++ 中找不到的元素
- 为什么这个程序没有打印返回的迭代器的正确第二个元素?
- 使第二个类的构造函数成为第一个类中的友元函数
- 为什么第二个代码给出了预期的结果,而第一个代码却没有?
- 复制列表并返回指向第二个列表的指针
- 如何获取列表中的倒数第二个元素
- 如何迭代双重链接列表的每个第二个元素(戒指)
- 如何选择第二个列表框
- STL列表访问倒数第二个元素
- 变量数参数列表从其第二个条目开始
- 如何按第一个 STL 列表的顺序对第二个 STL 列表进行排序
- 无法转换初始值设定项列表的第二个参数