C++:没有用于初始化的匹配构造函数/候选构造函数不可行:需要单个参数,但未提供任何参数
C++: no matching constructor for initialization / candidate constructor not viable: requires single argument, but no arguments were provided
我正在尝试用 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 文件中的节点类型 class:
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 };
这是 linkedList.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 };
很简单。查看 NodeType
的构造函数(linkedList.h,第 10 行)。它需要一个字符串。然而,当您创建 NodeType
的新实例时(linkedList.cpp,第 18 行,第 54 行),您在调用构造函数 时没有 任何参数。
正确的方法是...
NodeType* newnode = new NodeType("Some string.");
如果您希望构造函数中的字符串参数是 可选的,您可以通过将构造函数的 header 原型更改为...
NodeType(std::string str="Some default value");
此外,您可以重载您的构造函数,一个不带参数,一个接受字符串,等等。
众所周知,这是一个非常基本的原则。如果您是一名学生(正式或非正式),您将需要复习 C++ Object 面向编程,特别是 "Constructors".
我正在尝试用 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 文件中的节点类型 class:
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 };
这是 linkedList.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 };
很简单。查看 NodeType
的构造函数(linkedList.h,第 10 行)。它需要一个字符串。然而,当您创建 NodeType
的新实例时(linkedList.cpp,第 18 行,第 54 行),您在调用构造函数 时没有 任何参数。
正确的方法是...
NodeType* newnode = new NodeType("Some string.");
如果您希望构造函数中的字符串参数是 可选的,您可以通过将构造函数的 header 原型更改为...
NodeType(std::string str="Some default value");
此外,您可以重载您的构造函数,一个不带参数,一个接受字符串,等等。
众所周知,这是一个非常基本的原则。如果您是一名学生(正式或非正式),您将需要复习 C++ Object 面向编程,特别是 "Constructors".