2010-09-15 17 views
6

Actuellement, j'ai une classe A qui hérite de la classe B, et B n'a pas de constructeur par défaut. Je suis en train de la créer un constructeur pour A qui a les mêmes paramètres exacts pour le constructeur de » B, mais je reçois:Classe héritée de la classe sans le constructeur par défaut

error: no matching function for call to ‘B::B()’ 
note: candidates are: B::B(int) 

Comment pourrais-je corriger cette erreur?

+0

Veuillez poster votre code actuel –

+0

@Ramon Zarazua - pourquoi? J'ai déjà eu la réponse ... – wrongusername

Répondre

14

Le constructeur devrait ressembler à ceci:

A(int i) : B(i) {} 

Le bit après que le moyen colon, « initialiser l'objet classe de base B sous de cet objet en utilisant son constructeur int, avec la valeur i ».

Je suppose que vous n'avez pas fourni d'initialiseur pour B, et par conséquent le compilateur tente par défaut de l'initialiser avec le constructeur sans-arguments inexistant.

+0

Merci d'avoir expliqué ce que cela signifie, Steve! Je n'ai pas réalisé qu'il y avait un initialiseur – wrongusername

2

Vous devez appeler le constructeur de base via la liste d'initialisation de votre classe.

Exemple:

class C : public B 
{ 
public: 
    C(int x) : B(x) 
    { 
    } 

}; 

Lorsque vous n'initialisez pas B il explicitement essayer d'utiliser le constructeur par défaut qui n'a pas de paramètres.

Questions connexes