2012-10-11 4 views
1

Lors d'une tentative de construire un programme C++ contenant le code suivant:constructeur C++ appeler un autre constructeur

menutype::menutype(int cat_num){ 
    extras list = extras(cat_num); 
} 

extras::extras(int num_cats){ 
    head = new category_node; 
    head->next = NULL; 
    head->category = 1; 
    category_node * temp; 
    for(int i = 1; i < (num_cats); ++i){ 
     temp = new category_node; 
     temp->next = head->next; 
     head->next = temp; 
     temp->category = (num_cats-(i-1)); 
    } 
} 

Je reçois l'erreur:

cs163hw1.cpp: In constructor ‘menutype::menutype(int)’:
cs163hw1.cpp:59:31: error: no matching function for call to ‘extras::extras()’
cs163hw1.cpp:59:31: note: candidates are:
cs163hw1.cpp:5:1: note: extras::extras(int)

et je ne comprends pas pourquoi, s'il vous plaît aider!

Répondre

5

Depuis cette ligne ne doit pas tenter d'appeler un constructeur par défaut (seulement copier constructeur et constructeur de conversion de int), je vais deviner que vous avez un membre de données de type extras dans votre classe menutype, donc vous devez initialiser dans la liste des initialiseur parce qu'il ne dispose pas d'un constructeur par défaut:

menutype::menutype(int cat_num) : list(cat_num) { //or whatever the member is called 

} 
+0

Ce fut, je vous remercie – Flexo1515

+0

@ user1404053 à tout moment. –

2

il semble que votre menutype est titulaire d'un membre de type extras. Si tel est le cas, et si extras n'a pas un constructeur par défaut (comme cela semble être le cas), vous devez l'initialiser dans la liste d'initialisation:

menutype::menutype(int cat_num) : myextrasmember(cat_num) {} 
1

On pourrait généralement appeler un constructeur dans un constructeur d'une autre classe (comme dans votre exemple) de la manière suivante:

menutype::menutype(int cat_num) : list(cat_num) { }

Ceci est plus efficace que le constructeur pour la liste (de type supplémentaire) est appelé dans la liste des initialiseur.

1

Comme d'autres l'ont dit, vous appelez le constructeur incorrectement.

Trois autres personnes ont déjà indiqué la bonne méthode de la liste d'initialisation. Cependant, personne n'a indiqué comment appeler correctement un constructeur en dehors du contexte d'un constructeur.

Au lieu de:

extras list = extras(cat_num); 

Do:

extras list(cat_num); 
Questions connexes