const_iterator的初始化器没有匹配的构造函数

时间:2014-10-20 04:25:12

标签: c++

好吧,这是我的问题。我被告知我班上没有匹配的构造函数。这是调用它的代码。 (忽略输入。我输入的内容似乎并不重要,这一切都很糟糕)。

const_iterator end() const { return const_iterator(root->parent,true); }

这是初始化器。

const_iterator(Node *n, bool b):node(n),end(b) {}
const_iterator(const_iterator &that):node(that.node),end(that.end){}

对于第一个,编译器说预期有2个参数,只提供一个参数,第二个参数表示期望l值。

1 个答案:

答案 0 :(得分:3)

您的编译器正在尝试查找const_iterator的拷贝构造函数,该拷贝构造函数可用于初始化end()的返回值 - 问题不在于return语句本身,而在于复制将表达式返回到返回值。

由于您要返回一个临时的,您需要一个可以采用临时( r-value )的复制构造函数。对非const的引用不能绑定到临时,因此无法选择第二个构造函数。

另一方面,对const的引用可以匹配。因此,既然您还没有修改参数,请更改您的签名:

const_iterator(const_iterator const& that):node(that.node),end(that.end){}

const_iterator(const const_iterator& that):node(that.node),end(that.end){}