C++: pas de correspondance constructeur d'initialisation / candidat constructeur pas viable: nécessite un seul argument, mais non les arguments ont été fournis
Je suis en train de mettre en œuvre une liste liée dans C++ et ne savez pas comment réparer l'erreur donnée ci-dessous. J'apprécierais toute aide au débogage et, plus important encore, l'explication de tous les concepts sous-jacents que je n'ai pas compris concernant cette erreur. Merci.
Voici mon erreur:
linkedList.cpp:19:23: error: no matching constructor for initialization of 'NodeType'
newnode = new NodeType;
^
./linkedList.h:10:9: note: candidate constructor not viable: requires single argument 'str', but no arguments
were provided
NodeType(const std::string str);
^
./linkedList.h:4:7: note: candidate constructor (the implicit copy constructor) not viable: requires 1
argument, but 0 were provided
class NodeType
^
linkedList.cpp:54:29: error: no matching constructor for initialization of 'NodeType'
NodeType* newnode = new NodeType;
^
./linkedList.h:10:9: note: candidate constructor not viable: requires single argument 'str', but no arguments
were provided
NodeType(const std::string str);
^
./linkedList.h:4:7: note: candidate constructor (the implicit copy constructor) not viable: requires 1
argument, but 0 were provided
class NodeType
^
Voici mon NodeType classe dans mon linkedList.h fichier:
3 //define the node class
4 class NodeType
5 {
6 private:
7 std::string value;
8 NodeType* next;
9 public:
10 NodeType(std::string str);
11 friend class LinkedList;
12 };
Ici est la méthode de la linkedList.cpp le fichier pour la première erreur:
10 LinkedList::LinkedList(const LinkedList& src)
11 {
12 head = NULL;
13 NodeType* srccur; //node that is currently in src
14 srccur = src.head;
15
16 NodeType* pre = NULL; //predecessor of the new node
17 while (srccur != NULL) //have not finished yet
18 { NodeType* newnode;
19 newnode = new NodeType;
20 if (newnode == NULL) //dynamic allocation failed
21 { cout << "Memory allocation error" << endl;
22 exit(1);
23 }
24
25 newnode->value = srccur->value;
26
27 if (pre == NULL) //the new node becomes the 1st node
28 head = newnode;
29 else //the new node is attached to the end
30 pre->next = newnode;
31
32 newnode->next = NULL;
33
34 pre = newnode;
35 srccur = srccur->next;
36 }
37 };
Ici est la méthode de la linkedList.cpp fichier pour la deuxième erreur:
53 bool LinkedList::insertFirst(string v){
54 NodeType* newnode = new NodeType;
55
56 if (newnode == NULL) //dynamic allocation failed
57 {
58 return false;
59 }
60
61 newnode->value = v;
62 newnode->next = head;
63
64 head = newnode;
65
66 return true;
67 };
Vous devez vous connecter pour publier un commentaire.
Très simple. Regardez votre constructeur de
NodeType
(linkedList.h, ligne 10). Il nécessite une seule chaîne. Pourtant, lorsque vous créez de nouvelles instances deNodeType
(linkedList.cpp, ligne 18, ligne 54), vous pouvez appeler le constructeur sans tous les arguments.La bonne façon de le faire serait...
Si vous voulez que l'argument de la chaîne dans le constructeur pour être facultatif, vous pouvez le faire en modifiant le constructeur de l'en-tête de prototype pour...
Aussi, vous pourriez surcharge votre constructeur, en avoir un pour pas d'arguments, l'un d'accepter une chaîne, et ainsi de suite.
Si vous le savez, c'était un principe de base. Si vous êtes un étudiant (officiellement ou officieusement), vous aurez envie d'examiner C++ Programmation Orientée Objet, en particulier "les Constructeurs".