Frage

Ich schrieb dieses Programm in VC ++ 2010:

class class1
{
public:
 class1 (initializer_list<int> a){};
 int foo;
 float Bar;
};
void main()
{
 class1 c = {2,3};
 getchar();
}

, aber ich diesen Fehler erhalten, wenn i-Projekt kompilieren:

Fehler 1 Fehler C2552: 'c': Nicht-Aggregate können nicht initialisiert werden mit initializer Liste c: \ users \ pswin \ Dokumente \ visuelle Studio \ 2010 \ projects test_c ++ 0x \ test_c ++ 0x \ main.cpp 27

und

2 IntelliSense: Initialisierung mit ‚{...}‘ ist nicht für Objekt erlaubt von Art "Class1" c: \ users \ pswin \ Dokumente \ visuelle Studio \ 2010 \ projects test_c ++ 0x \ test_c ++ 0x \ main.cpp 27

Was ist das Problem?

War es hilfreich?

Lösung

Es sollte nicht unterstützt bei allen :

[...] die C ++ 0x Core-Sprache-Funktion von initializer Listen und den zugehörigen Standardbibliothek Änderungen wurden in VC10 nicht implementiert.

Die Fehlermeldung bezieht sich auf die Pre-C ++ 0x Merkmal aggregierte Initialisierung, die durch Verwendung von geschweiften Klammern die Initialisierung bestimmter benutzerdefinierte Typen ermöglicht:

struct pair { int first; char second; };
pair p = { 0, 'c' };

Aggregate sind definiert in §8.5.1 :

Ein Aggregat ist ein Array oder eine Klasse (Ziffer 9) ohne User-deklarierten Konstruktoren (12.1), keine privaten oder geschützte nicht-statische Datenelemente (Ziffer 11), keine Basisklassen (Ziffer 10), und keine virtuelle Funktionen (10.3).

Wenn ein Aggregat initialisiert der Initialisierer eine Initialisierer-Klausel enthalten kann, bestehend aus einem brace- eingeschlossen ist, durch Kommata getrennte Liste von Initialisierer-Klauseln für die Mitglieder des Aggregats, geschrieben in zunehmenden tief- oder Mitglied Reihenfolge. Wenn das Aggregat subaggregates enthält, gilt diese Regel rekursiv an die Mitglieder des Unteraggregat.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top