Compiler Error C2552
"Bezeichner": NichtAggregate können nicht mit Initialisiererliste initialisiert werden
Der gesamte Bezeichner wurde falsch initialisiert.
Aggregate werden folgendermaßen definiert:
Arrays
Klassen, Strukturen und Unions, die aufweisen:
Konstruktoren
Private oder geschützte Member
Basisklassen
Virtuelle Funktionen
Außerdem können Visual C++ nicht Datentypen in einem Aggregat, das Konstruktoren enthält.
Die folgenden stellt die Gründe dar, die C2552 möglicherweise ausgelöst wird, wenn eine gesamte Initialisierung für einen Typ versucht wird:
Der Typ verfügt über eine oder mehrere benutzerdefinierte Konstruktoren.
Der Typ verfügt über ein nicht statischeres Erz, privaten Datenmember.
Der Typ verfügt über eine oder mehrere virtuelle Funktionen.
Der Typ ist eine Basisklasse.
Der Typ ist eine Verweisklasse oder CLR-Schnittstelle.
Der Typ ist ein skalares (int i = {};)
Der Typ verfügt über ein nicht-korrigiertes Dimensionsarray (NullArray) dessen Elemente Destruktoren besitzen.
Im folgenden Beispiel wird C2552 generiert:
// C2552.cpp
// compile with: /clr
#include <string>
using namespace std;
struct Pair_Incorrect {
private:
string m_name;
double m_val;
};
struct Pair_Correct1 {
public:
Pair_Correct1(string name, double val)
: m_name(name), m_val(val) {}
private:
string m_name;
double m_val;
};
struct Pair_Correct2 {
public:
string m_name;
double m_val;
};
int main() {
// To fix, add a constructor to this class and use it for
// initializing the data members, see Pair_Correct1 (below)
// or
// Do not have any private or protected non-static data members,
// see Pair_Correct2 (below). Pair_Correct2 is not recommended in
// case your object model requires some non-static data members to
// be private or protected
string name("John");
Pair_Incorrect pair1 = { name, 0.0 }; // C2552
// initialize a CLR immutable value type that has a constructor
System::DateTime dt = {2001, 4, 12, 22, 16, 49, 844}; // C2552
Pair_Correct1 pair2( name, 0.0 );
Pair_Correct1 pair3 = Pair_Correct1( name, 0.0 );
Pair_Correct2 pair4 = { name, 0.0 };
System::DateTime dt2(2001, 4, 12, 22, 16, 49, 844);
}