没有匹配函数用于调用...模板类的错误

时间:2011-05-10 19:29:05

标签: c++ gcc

我必须做一个通用的双链表,我在vc ++ 2010中创建它,一切运行良好,但我必须用gcc编译它,但它无法编译它。当我调用一个迭代器作为参数的方法时,我得到了这个错误:

no matching function for call to 'DLList<int>::Erase(DLList<int>::iterator, DLList<int>::iterator)'| 
[...]note: candidates are: void DLList<T>::Erase(DLList<T>::iterator&, DLList<T>::iterator&) [with T = int]|

DLList位于.h文件中,并且每个方法都是内联定义的。迭代器类也在DLList类中。

template<typename T>
class DLList{
[...]
public: 
[...]
    void Erase(iterator &_first, iterator &_last){...}
    iterator first(){...}
    iterator last(){...}
[...]
    class iterator{...}
[...]
};

导致错误的代码:

iList.Erase(iList.first(), iList.last());

(iList:DLList&lt; int&gt; iList)

我该如何解决?

2 个答案:

答案 0 :(得分:3)

void Erase(iterator const &_first, iterator const &_last){...}

这允许传递从first()last()返回的临时迭代器。你不能得到一个临时的非const引用。

或者,您可以使用此函数签名并处理迭代器副本(如果您需要在Erase内修改它们):

void Erase(iterator _first, iterator _last){...}

答案 1 :(得分:2)

问题是非const引用不能绑定到临时引用。 first()last()的结果是临时的,而Erase的签名中的引用无法约束这些结果。