2010-07-19 22 views
4

J'ai une classe appelée Foo avec un constructeur qui a besoin d'arguments, et une autre classe Bar avec une Foo variable privéeLa variable privée doit être initialisée uniquement dans le constructeur. Comment?

class Foo 
{ 
     public: 
     Foo(string); 
} 

class Bar 
{ 
     public: 
     Bar() { this->foo = Foo("test") } 

     private: 
     Foo foo; 
} 

Cependant, lorsque je tente de compiler ce, je reçois une erreur de compilation qu'il n'y a Foo::Foo() constructeur. Il semble que la variable privée foo dans la classe Bar soit initialisée avant d'obtenir une valeur affectée dans le constructeur.

Comment puis-je avoir une variable privée foo qui attend d'être initialisée dans mon constructeur?

Répondre

9

Vous devez utiliser une liste d'initialisation. Si vous ne le faites pas, votre code appellera le constructeur par défaut pour cet objet.

Bar::Bar() : foo("test") { 
    // stuff 
} 
+0

Super, je vais essayer. – Peterdk

+0

oui, ça a marché. – Peterdk

7

Utilisez une liste d'initialiseur:

Bar() : foo("test") {} 

BTW, dans les motifs de C à utiliser this-> sont rares (et souvent indiquer d'autres problèmes).

+0

Ok, ouais, je viens de Java, C# et j'ai juste commencé à essayer du C++. Voilà pourquoi mon> utilisation. :) – Peterdk