没有用于调用的匹配函数..模板类错误
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
我该如何解决它?
void Erase(iterator const &_first, iterator const &_last){...}
这允许传递从 first()
和 last()
返回的临时迭代器。您无法获取对临时的非常量引用。
或者,您可以使用此函数签名并处理迭代器副本(例如,如果您需要在Erase
中修改它们):
void Erase(iterator _first, iterator _last){...}
问题是非常量引用不能绑定到临时引用。first()
和last()
的结果是暂时的,不能受Erase
签名中的引用的约束。
相关文章:
- "error: no matching function for call to"构造函数错误
- 为什么类中的ostringstream类型的成员会导致";调用隐含删除复制构造函数";错误
- 尝试将unique_ptrs推送到向量时使用纯虚拟函数错误
- C++ OpenCV 卡尔曼滤波器构造函数错误
- C++:用户定义的显式类型转换函数错误
- C++ 合并字符串以'system'函数错误
- C++ wmain 函数错误时使用 Unicode
- 结构数组的构造函数错误,错误消息:没有构造函数实例与参数列表匹配
- C++ 中常量属性的初始化构造函数错误
- 线程 std::调用未知类型,无法专门化函数错误
- 表单显示对话框函数错误,并且不执行下面的语句
- 函数错误 C2059:语法错误:'>'不起作用
- STL向量上出现奇怪的复制构造函数错误
- C++ Visual Studio 重载函数错误:没有重载函数的实例与指定的类型匹配
- C++引用已删除函数错误
- 为什么通过带有文字编号的引用调用会出现"无匹配函数"错误?
- C++ 乘法定义的构造函数错误消息似乎错误
- 在 c++ 代码中将数组传递给函数错误
- FFMPEG avcodec_decode_video2函数错误代码
- 为什么我会收到转换函数错误