struct SS {int a; int s;};
int main()
{
vector<SS> v;
v.push_back(SS{1, 2});
}
Il codice può essere compilato senza errori. Tuttavia, quando la struct è inizializzata in classe, ho ottenuto un errore di compilazione. Qualcuno può spiegarlo?C++ 11 errore compilazione inizializzazione struct
struct SS {int a = 0; int s = 2;};
Errore:
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
destro, mi stava per rispondere in modo simile. Può essere visto anche senza le funzionalità di C++ 11, aggiungendo un 'costruttore di dati personalizzato() {}'. – hvd
C++ 14 non esclude più le classi con gli inizializzatori in classe da essere aggregati; Vedi http: // www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3653.html – bames53
@ bames53 Grazie, non lo sapevo. È una grande notizia Trovo questa particolare regola eccessivamente restrittiva. – juanchopanza