繁体   English   中英

没有匹配的函数来调用…类模板错误

[英]no matching function for call to… error with template class

我必须做一个通用的双链表,并且我在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 <int> iList)

我该如何解决?

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

这允许传递从first()last()返回的临时迭代器。 您无法获得对临时变量的非常量引用。

另外,您可以使用此函数签名并处理迭代器副本(例如,如果需要在Erase进行修改):

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

问题是非常量引用不能绑定到临时目录。 first()last()是临时的,并且它们不能由Erase签名中的引用绑定。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM