我正在尝试使用C ++实现链接列表,并且不知道如何修复下面给出的错误。我非常感谢任何有关调试的帮助,更重要的是,我对这个错误我不理解的任何基本概念的解释。感谢。
这是我的错误:
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
^
这是我的linkedList.h文件中的NodeType类:
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 };
以下是第一个错误的linkedList.cpp文件中的方法:
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 };
以下是linkList.cpp文件中第二个错误的方法:
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 };
答案 0 :(得分:5)
很简单。查看NodeType
的构造函数(linkedList.h,第10行)。它需要一个字符串。然而,当您创建NodeType
的新实例(linkedList.cpp,第18行,第54行)时,您正在调用构造函数而不使用任何参数。
这样做的正确方法是......
NodeType* newnode = new NodeType("Some string.");
如果您希望构造函数中的字符串参数为可选,则可以通过将构造函数的头部原型更改为...
NodeType(std::string str="Some default value");
此外,您可以重载您的构造函数,其中一个不带参数,一个接受字符串,依此类推。
您知道,这是一个非常基本的原则。如果您是学生(正式或非正式),您将要查看C ++面向对象编程,特别是&#34;构造函数&#34;。