我在新的C ++编辑器中有这个代码我正在尝试(CLion):
struct screenPoint {
float x = 0, y = 0;
screenPoint(float x_, float y_): x{x_}, y{y_}{}
};
struct position {
screenPoint ul;
float width = 0, height = 0;
position(screenPoint p, float w, float h): ul{p},width{w},height{h}{}
};
接近结尾是初始化语句ul{p}
,我认为这是使用大括号初始化的有效C ++方式。但是,克里昂抱怨道:
Incompatible types in initialiser: Types 'float' and 'screenPoint' are not compatible.
注意:没有编译器错误或警告,代码按预期工作。
如果我将其更改为ul(p)
,则错误消失。
现在,我知道screenPoint
没有接受另一个screenPoint
的构造函数,但在初始化时是否需要这样的?
答案 0 :(得分:3)
这是编辑错误。使用相同类型的元素进行列表初始化应该调用隐式复制构造函数。
有关于尝试复制聚合的核心语言缺陷(1467),但这不是聚合。
答案 1 :(得分:2)
肯定是克里昂的问题。在跟踪器中有它:https://youtrack.jetbrains.com/issue/CPP-6939