调用“ Node”的构造函数不明确

时间:2020-01-20 21:40:09

标签: c++ data-structures linked-list nodes

我正在跟踪教科书中的链接列表实现,并且收到错误消息:“在我的LinkedList.cpp中,此私有函数中对“节点”的构造函数的调用不明确:

void P1LinkedList::init(){
    theSize = 0;
    head = new Node;    //causes error
    tail = new Node;    //causes error
    head->next = tail; 
    tail->prev = head; 
} 

这是我的Node.h:

#ifndef Node_h
#define Node_h
struct Node{

        int data; 
        Node* next; 
        Node* prev; 

        Node(const int & d = 0, Node *p = nullptr, Node *n = nullptr); 
        Node(int && d = 0, Node *p = nullptr, Node *n = nullptr); 
};
#endif

还有我的Node.cpp:

#include "Node.h"
#include<iostream>

Node::Node(const int & d, Node *p, Node *n)
    :data{d}, prev{p}, next{n}{}

Node::Node(int && d, Node *p, Node *n)
    :data{std::move(d)}, prev{p}, next{n}{}

我猜想这与我编写Node构造函数的方式有关,但是我是根据教科书的概述编写的,因此我不确定自己做错了什么。

1 个答案:

答案 0 :(得分:3)

您已经编写了两个构造函数,都可以使用一个空的参数列表来调用它们。结果,编译器无法知道您打算调用哪个构造函数,也无法调用。

解决方案:确定要调用的构造函数,并确保使用这些参数(在这种情况下,没有参数)不能调用另一个构造函数。

在这种非常特殊的情况下,只需删除第二个构造函数。它没有做任何事情都没有做。