no matching constructor for initialization

定义新节点出现错误

 1 /*
 2 // Definition for a Node.
 3 class Node {
 4 public:
 5     int val;
 6     Node* next;
 7     Node* random;
 8     
 9     Node(int _val) {
10         val = _val;
11         next = NULL;
12         random = NULL;
13     }
14 };
15 */

为什么按照如下的方式定义节点会出现错误?

Node* new_node;
new_node = new Node;

报错:no matching constructor for initialization(没有用于初始化的匹配构造函数)

正确的定义如下:

Node* new_node;
new_node = new Node(head_temp -> val);

解释:

在类中,有一种函数称为构造函数,这种函数没有函数类型,在定义一个对象时,首先就会执行构造函数。

上述的类中,构造函数有一个形参,所以定义一个对象时,必须要带形参。

若类中没有构造函数时,系统会自动生成一个没有形参的空构造函数,这时定义对象就可以不加形参了。

疑问:一个类中,有多个构造函数,首先会执行哪个构造函数?

解释:应该是根据构造函数的参数来确定执行构造函数。

原文地址:https://www.cnblogs.com/QQ2962269558/p/13246164.html