gpt4 book ai didi

c++ - 调用模板函数问题 "No matching function for call"arguments : iterators, object function

转载 作者:行者123 更新时间:2023-11-28 01:18:53 26 4
gpt4 key购买 nike

我正在学习面向对象类(class)的考试,我有一个关于 STL 的经验,包括库算法、迭代器等。我正在尝试发送给函数迭代器和对象函数,但它没有工作。编译器说“没有匹配的调用函数”

我在这里搜索了其他人的解决方案,并修复了一些问题(r 值类型),但仍然不知道问题出在哪里。我找到的解决方案都没有解决它。

这是具体的功能:

template <class IT1, class IT2, class FUNC>
void swapElementsIf(IT1& begin1, IT1& end1, IT2& begin2, IT2& end2, FUNC f) {
if ((begin1 == end1) || (begin2 == end2))
throw EmptyExp();
while (begin1 != end1 && begin2 != end2) {
if (f(*begin1, *begin2))
std::swap(*begin1, *begin2);
begin1++;
begin2++;
}
if (((begin1 == end1) && (begin2 != end2)) || ((begin1 != end1) && (begin2 == end2)))
throw NotSameSizeExp();
}

我从 main 调用它,就像这样:

swapElementsIf(v1.begin(),v1.end(),l1.begin(),l1.end(),std::less<double>());

最佳答案

std::vector::begin() 返回临时对象(右值),临时对象不能传递给采用引用(左值)的函数。

始终查看完整的编译器错误输出,因为它通常包含现代编译器的提示。例如。铿锵打印:

<source>:26:5: error: no matching function for call to 'swapElementsIf'

swapElementsIf(v1.begin(),v1.end(),l1.begin(),l1.end(),std::less<double>());

^~~~~~~~~~~~~~

<source>:9:6: note: candidate function [with IT1 = __gnu_cxx::__normal_iterator<int *, std::vector<int, std::allocator<int> > >, IT2 = __gnu_cxx::__normal_iterator<int *, std::vector<int, std::allocator<int> > >, FUNC = std::less<double>] not viable: expects an l-value for 1st argument

void swapElementsIf(IT1& begin1, IT1& end1, IT2& begin2, IT2& end2, FUNC f) {

^

更改您的函数以按值获取迭代器:

void swapElementsIf(IT1 begin1, IT1 end1, IT2 begin2, IT2 end2, FUNC f)

迭代器通常基本上只是一个指针,因此复制起来很便宜,因此无论如何使用引用都没有任何好处。

关于c++ - 调用模板函数问题 "No matching function for call"arguments : iterators, object function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57614599/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com