Я определяю ctor списка инициализаторов (sequence 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()
{
}
I'mиспользование VisualC ++ с Visual Studio 2017 это действительно странно ..
РЕДАКТИРОВАТЬ 2
в этом примере это работает, но, как я указывал в комментариях, это не такв VS 2017
http://coliru.stacked -crooked.com / a / e1de3b215c6c4634