调用重载的构造函数是不明确的

时间:2014-11-27 17:53:44

标签: c++ constructor ambiguous

我正在尝试实现面向对象的二叉树,但是,我得到一个重载构造函数调用的错误消息。问题是我确实拥有必要的构造函数,但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*)

3 个答案:

答案 0 :(得分:5)

你的两个构造函数的默认参数为“overlap”:

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

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

这两项内容都可以与只有intintNode *的来电匹配。

看起来还有其他重叠的构造函数。

答案 1 :(得分:2)

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

这三个是不明确的调用,因为如果您通过以下方式调用它,编译器将无法解析该调用: -

Node node(1);

答案 2 :(得分:0)

以下构造函数不明确(等等)。如果用户说Node node(5),则编译器不知道您的意思是Node(const int& 5, Node* = nullptr);还是Node(const int& 5)

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