2010-12-03 3 views
6

Ich habe eine C++ Klasse mit zwei MembervariablenKarte initialisieren und Klassenmitgliedsvariablen in C++ leer setzen?

std::map<int, Node*> a; 

und

std::set<Node*> b; 

Ein Stil-Checker an meiner Universität verwendet wird, erfordern alle Membervariablen in dem Konstruktor der Klasse initialisiert werden. Wie können diese Membervariablen a und b im Konstruktor der Klasse, in der sie sich befinden, initialisiert werden?

+0

Sie haben zwei Antworten kommentiert mit "das funktioniert, danke". Sie sollten jetzt eine (im Falle von identischen Antworten, in der Regel die erste) akzeptieren. ;) – Mephane

Antwort

11

So:

class A 
{ 
    public : 

    A() : s(), 
     m() 
    { 
    } 


    std::set<int> s; 
    std::map< int, double > m; 
}; 
+0

Das funktioniert, danke! –

2

Gefällt mir SomeClass::SomeClass() : a(), b() {}?

+0

Das funktioniert, danke! –

2

sowohl als std::set und std::map haben „user“ -declared Standardkonstruktoren werden sie implizit initialisiert werden, aber Sie Ihre Klasse konstruieren. Sie müssen nichts Besonderes tun, um dem "Style" Guide zu entsprechen.

+0

Danke Charles. Das Problem hierbei war, dass die Stilüberprüfung automatisch als Teil eines automatischen Benotungssystems durchgeführt wird und alle Mitgliedsvariablen explizit initialisiert werden müssen. –

+0

@Marek Miettinen: Sind Sie sicher, dass der Style-Check nicht nur für POD-Typen gilt? Ich habe noch nie einen Styleguide gesehen, der darauf besteht, Dinge explizit zu initialisieren, die Standardkonstruktoren haben, die in jedem Fall für die implizite Initialisierung verwendet würden. –

+0

Und wenn der Style Checker das wirklich benötigt, ist es kaputt, einfach so. – etarion

0

Diese Überprüfung wird vom g ++ - Compiler ausgeführt, wenn die Warnoption -WeffC++ angewendet wird. Siehe Punkt 4 ("Stellen Sie sicher, dass Objekte initialisiert werden, bevor sie verwendet werden" in Scott Meyers, Effektive C++, Buch für weitere Informationen, Warum es sinnvoll sein könnte, alle Mitglieder mithilfe der Elementinitialisierungsliste zu initialisieren. Im Grunde er schlägt vor, dies konsequent zu tun und dies über Zuweisungen innerhalb Konstruktor Körper

+0

Wie erklärt dies, wie man das macht? Die effektive C++ - Referenz ist gutes Forschungsmaterial, aber keine richtige Antwort. – ssube

+0

@peachykeen: Sie haben Recht, das ist eher ein Kommentar, als eine Antwort auf die erste Frage. –