struct SS {int a; int s;};
int main()
{
vector<SS> v;
v.push_back(SS{1, 2});
}
Код может быть скомпилирован без каких-либо ошибок. Однако, когда структура инициализируется в классе, я получил ошибку компиляции. Может ли кто-нибудь объяснить это?C++ 11 ошибка инициализации структуры проекта
struct SS {int a = 0; int s = 2;};
Ошибка:
In function ‘int main()’:
error: no matching function for call to ‘SS::SS(<brace-enclosed initializer list>)’
v.push_back(SS{1, 2});
^
note: candidates are:
note: constexpr SS::SS()
struct SS {int a = 0; int s = 2;};
^
note: candidate expects 0 arguments, 2 provided
note: constexpr SS::SS(const SS&)
note: candidate expects 1 argument, 2 provided
note: constexpr SS::SS(SS&&)
note: candidate expects 1 argument, 2 provided
Правильно, я собирался ответить аналогичным образом. Это можно увидеть и без возможностей C++ 11, добавив пользовательский конструктор 'SS() {}'. – hvd
C++ 14 больше не будет исключать классы с инициализаторами в классе из агрегатов; См. Http: // www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3653.html – bames53
@ bames53 Спасибо, я этого не знал. Это отличная новость. Я считаю это правило чрезмерно ограничительным. – juanchopanza