我在一个类中定义了一个初始化列表ctor(序列ctor),并给它一个默认参数,如下所示:
class Box
{
public:
Box(std::initializer_list<XMFLOAT3> vertices = {XMFLOAT3(), XMFLOAT3(), XMFLOAT3(), XMFLOAT3(), XMFLOAT3(), XMFLOAT3(), XMFLOAT3(), XMFLOAT3()});
~Box();
void SetVertices(std::initializer_list<XMFLOAT3> vertices);
XMFLOAT3 (&GetVertices())[8];
Mesh &GetMesh() { return mMesh; }
private:
XMFLOAT3 mVertices[8];
Mesh mMesh;
};
但是当我将Box类型的对象放在另一个类中时,编译器会抱怨没有可用的默认ctor。为什么?
编辑 如果我将默认ctor调用到包含类ctor的初始化列表中:
Bone::Bone(std::string const &name) : mName(name), mCollisionBox{}
{
}
(我知道当存在initializer_list ctor时,花括号符号会首先调用默认ctor,而不是带有空列表的initializer_list ctor) 它会调用默认的ctor。
如果我明确调用默认的ctor,也会调用它:
Bone::Bone(std::string const &name) : mName(name), mCollisionBox()
{
}
我在Visual Studio 2017中使用VisualC ++ 真的很奇怪。
编辑2
在此示例中它有效,但是正如我在注释行中指出的那样,它在VS 2017中不可用
答案 0 :(得分:-1)
您问的是错误的问题-因为您的要求完全合法。可能是错误造成的,或者您需要提供一个最小而完整的示例。