2015-04-20 7 views
9

Ich habe eine Klasse Thing Sport kein Standardkonstruktor.C++ Mitglied Array Initalisierung ohne Standardkonstruktoren

Jetzt definieren wir eine andere Klasse, die nun die Array-Elemente auf einmal initialisieren muss, da ohne einen Standardkonstruktor keine späte Zuweisung vorgenommen werden kann. So haben wir:

class TwoThings 
{ 
    public: 

    Thing things[2]; 

    TwoThings() : things({Thing("thing 1"),Thing("thing 2")}) 
    { 
    } 
} 

Ist das der richtige Weg?

GCC kompiliert es gut, während Clang nicht, unter Angabe einer "Initialisierungsliste" sollte verwendet werden. Ich versuchte mehrere alternative Möglichkeiten wie doppelte Klammern {{ ... }} und so, aber nicht schaffen, eine Compiling-Entsprechung für Clang zu bekommen.

Wie initialisiert man Arrays ohne Standardkonstruktor in Clang?

Antwort

9

Ja, in Klammern gesetzte Member-Array-Initialisierung ist eine GCC-Erweiterung. Um es Standard beziehen, können Sie nur einen einzigen Satz von Klammern verwenden (erfordert C++ 11):

TwoThings() : things{Thing("thing 1"),Thing("thing 2")} 
{ 
} 

Wenn Sie nicht C 11 ++ verwenden, könnten Sie eine andere Speichermethode verwenden möchten, wie std::pair<Thing,Thing> oder std::vector<Thing>.

+0

Also gibt es keinen Weg ohne diese Erweiterung oder C++ 11 (bricht viele meiner älteren Bibliotheken) ein Array zu initialisieren? – dronus

+1

Sie könnten eine andere Speichermethode verwenden, wie 'std :: pair ' oder 'std :: vector '. – TartanLlama

+0

Ich nehme an, dass 'std :: vector' Elemente mit dem Standardkonstruktor benötigen würde? – dronus