2014-11-27 3 views
1

Я пытаюсь реализовать объектно-ориентированное двоичное дерево, однако я получаю сообщение об ошибке вызова перегруженного конструктора неоднозначным. Проблема в том, что у меня действительно есть необходимый конструктор, но C++, похоже, не распознает его.Вызов перегруженного конструктора неоднозначен

Мой код: http://pastebin.com/PM9PDYAN

Сообщение об ошибке:

56 36 In constructor 'Node::Node(const int&, Node*, Node*, const int&)': 
56 36 [Error] call of overloaded 'Node(const int&, Node* const)' is ambiguous 
17 3 [Note] Node::Node(const int&, Node*) 
15 3 [Note] Node::Node(const int&, const int&, Node*) <near match> 
15 3 [Note] no known conversion for argument 2 from 'Node* const' to 'const int&' 
37 1 [Note] Node::Node(const int&, Node*, Node*, Node*) 
+0

Поставьте * соответствующий * код в вопрос, не ссылайтесь на него. Благодарю. – Borgleader

ответ

5

Ваши два конструктора с аргументами по умолчанию "перекрытием":

Node(const int&, Node* = nullptr, Node* = nullptr, Node* = nullptr); 

И:

Node(const int&, Node* = nullptr); 

Оба они могли соответствовать вызов с просто int или просто int и а Node *.

Похоже, что есть и другие перекрывающиеся конструкторы.

2
Node(const int&, Node* = nullptr, Node* = nullptr, Node* = nullptr); 
Node(const int&); 
Node(const int&, Node* = nullptr); 

Эти три Неоднозначный вызовы, как компилятор не сможет разрешить вызов, если вы звоните его: -

Node node(1); 
0

Следующие конструкторы неоднозначны (среди прочих). Если пользователь скажет Node node(5), компилятор не знает, имеете ли вы значение Node(const int& 5, Node* = nullptr); или Node(const int& 5).

Node(const int&, Node* = nullptr); 
Node(const int&); 
Смежные вопросы