Призыв к конструктору Node неоднозначен - PullRequest
0 голосов
/ 21 января 2020

Я слежу за реализацией связанного списка из учебника и получаю сообщение об ошибке "вызов конструктора 'Node' неоднозначен в этой закрытой функции в моем 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}{}

Я предполагаю, что это связано с тем, как я написал Конструкторы узлов, но я написал их в соответствии с планом моего учебника, поэтому я не уверен, что сделал неправильно.

1 Ответ

3 голосов
/ 21 января 2020

Вы написали два конструктора, которые можно вызывать с пустым списком параметров. Как следствие, компилятор не может знать, какой конструктор вы намеревались вызвать, и ни один из них не может быть вызван.

Решение: решите, какой конструктор вы собираетесь вызывать, и убедитесь, что другой конструктор не может быть вызван с этими параметрами (в в этом случае без параметров).

В этом конкретном случае просто удалите второй конструктор. Он не делает ничего, что не делает первый.

...