没有用于初始化' listNode结构的匹配构造函数

时间:2018-06-05 03:10:21

标签: c++ struct initialization initializer-list

以下方法insert使用struct listNode的构造函数。

void list::insert(size_t i){
    if (head == nullptr){
        head = new listNode(nullptr,i);
        tail = head;
        ++len;
    }
    listNode* new_node = new listNode(nullptr,i);
    tail->next = new_node;
    tail = new_node;
}

listNode的定义

struct listNode{
        ////@: index into the input buffer
        listNode* next;
        size_t index;
};

除了这篇文章标题中给出的错误外,我还得到了说明

 note: candidate constructor (the implicit copy constructor) not
      viable: requires 1 argument, but 2 were provided
struct listNode{

这对我没有意义。很明显,我在初始化时提供了两个参数,它应该使用参数的lexicogrphical绑定到实际的参数。

1 个答案:

答案 0 :(得分:2)

head = new listNode(nullptr,i);

是错误的,因为listNode没有任何用户定义的构造函数。因此,您不能使用语法listNode(nullptr, i)来构造一个。

使用

head = new listNode{nullptr, i}; // This is member-member wise initialization

同样,而不是

listNode* new_node = new listNode(nullptr, i);

使用

listNode* new_node = new listNode{nullptr, i};