Конструктор initializer_list с аргументом по умолчанию - PullRequest
0 голосов
/ 05 октября 2018

Я определяю 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

1 Ответ

0 голосов
/ 05 октября 2018

Вы задаете неправильный вопрос - потому что то, что вы просите, совершенно законно.Возможно, ошибка в чем-то другом, или вам нужно предоставить минимальный и полный пример.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...