为什么没有可用于struct的默认构造函数?

Seb*_*ebi -3 c++ new-operator

我有一个结构:

struct ListNode {
     int val;
     ListNode *next;
     ListNode(int x) : val(x), next(NULL) {}
};
Run Code Online (Sandbox Code Playgroud)

我正在尝试初始化它:

ListNode* res = new ListNode();
ListNode* start = res;
Run Code Online (Sandbox Code Playgroud)

但我得到:

error C2512: 'ListNode' : no appropriate default constructor available
Run Code Online (Sandbox Code Playgroud)

为什么?

πάν*_*ῥεῖ 6

但我得到:

error C2512: 'ListNode' : no appropriate default constructor available
Run Code Online (Sandbox Code Playgroud)

为什么?

当然你得到了这个错误,因为你没有声明一个默认的构造函数ListNode.关于这一点,错误消息非常清楚.

一旦声明了自定义构造函数ListNode(int x);,编译器就不再为您生成默认构造函数.


要解决此问题,请声明默认构造函数1

 ListNode() : val(), next(NULL) {}
Run Code Online (Sandbox Code Playgroud)

或者召唤声明的人

 ListNode* res = new ListNode(42);
Run Code Online (Sandbox Code Playgroud)

1) struct表现出class与此无关的行为(如果这应该导致你的混淆).