Я определяю 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{}
{
}
(Я понимаю, что когда присутствует ctor initializer_list, нотация скобок сначала вызывает ctor по умолчанию, а не ctor initializer_list с пустым списком), он вызывает ctor по умолчанию.
Ctor по умолчанию также вызывается, если я его явно вызываю:
Bone::Bone(std::string const &name) : mName(name), mCollisionBox()
{
}
Я использую VisualC++ с Visual Studio 2017, это действительно странно.
ИЗМЕНИТЬ 2
в этом примере это работает, но, как я указал в закомментированной строке, это не так в VS 2017.
g++ 8.1.0
с-std=c++14
. Текущая демонстрация на coliru - person Scheff's Cat   schedule 05.10.2018Version 19.10.25017
.) Вы можете сравнить его с тем, который используется на вашей стороне. Может быть, простое обновление поможет. (Как я уже говорил, в очень старой версии с VS2013 это не работает. Похоже, MS приложила определенные усилия, чтобы исправить свои проблемы со списками инициализаторов, и я не знаю, в какой версии эти исправления стали доступны.) - person Scheff's Cat   schedule 05.10.2018/std:C++14
(упоминается @divinas): что вы используете? - person Scheff's Cat   schedule 05.10.2018c++14
. - person Scheff's Cat   schedule 05.10.2018g++
(и, возможно,clang
тоже) это простоg++ --version
. В VS2013 я открыл консоль и набралcl
. Среди прочего, мне рассказали версию:Microsoft (R) C/C++-Optimierungscompiler Version 18.00.40629 für x64
. Это должно быть как-то возможно также в/для VS2017. - person Scheff's Cat   schedule 05.10.2018