Ошибка инициализации структуры: не удалось преобразовать из 'структурировать - PullRequest
1 голос
/ 17 июня 2019

У меня есть следующий код:

struct Vec { double x=0, y=0, z=0; };

Vec orig = {1,2,3};

GCC 4.8.4 показывает следующую ошибку:

error: could not convert ‘{1, 2, 3}’ from ‘<brace-enclosed initializer list>’ to ‘Vec’
 Vec orig = {1,2,3};
                  ^

Когда я меняюсь, убираю знак равенства

Vec orig {1,2,3};

появляется другая ошибка:

error: no matching function for call to ‘Vec::Vec(<brace-enclosed initializer list>)’
 Vec orig {1,2,3};
                ^

Как правильно инициализировать структуру, не создавая конструктор?

1 Ответ

4 голосов
/ 17 июня 2019

Похоже, вы используете c ++ 11, но еще не c ++ 14.

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

https://en.cppreference.com/w/cpp/language/aggregate_initialization

Агрегат относится к одному из следующих типов:

...

  • тип класса (обычно struct или union), который имеет

    ...

    • нет инициализаторов членов по умолчанию (до c ++ 14)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...