【发布时间】:2020-02-06 14:15:29
【问题描述】:
我刚刚在大学完成了一门 C++ 课程,我们得到了期末作业。 (我只是想澄清一下:这绝不是我要求你为我做功课,我只是需要一些代码方面的帮助。)
我们的任务的第一部分是编写一个通用函数,它获取一个函子和两个索引:函子是一个条件,索引指向容器中的第一个元素和容器中最后一个元素之后的位置.该函数需要检查容器中有多少对元素满足函子的条件。
这是我的代码:
#include <iostream>
#include <vector>
using std::cout;
using std::endl;
using std::vector;
bool test(vector<int> v);
template<typename InputIterator, typename Condition>
int checkCondition(InputIterator first, InputIterator last, Condition condition);
class bigger{
public:
bigger() = default;
~bigger = default();
bigger(const bigger&) = default;
bigger& operator=(const bigger&) = default;
bool operator()(int a, int b) const {
return (a<b);
}
};
template<typename InputIterator, typename Condition>
int checkCondition(InputIterator first, InputIterator last, Condition condition){
int counter = 0;
while (first!=last){
vector<int>::iterator temp = first;
++temp;
if (condition(*first, *temp)){
counter++;
}
++first;
}
return counter;
}
bool test(vector<int> v){
vector<int>::iterator first = v.begin();
vector<int>::iterator last = v.end();
bigger condition();
return checkCondition(first, last, condition);
}
这是我使用 Linux 终端(ubuntu,因为我使用的是 windows)用 g++ 编译得到的错误:
part1OfDry.cpp: In instantiation of ‘int checkCondition(InputIterator, InputIterator, Condition) [with InputIterator = __gnu_cxx::__normal_iterator<int*, std::vector<int> >; Condition = bigger (*)()]’:
part1OfDry.cpp:41:49: required from here
part1OfDry.cpp:29:22: error: too many arguments to function
if (condition(*first, *temp)){
~~~~~~~~~^~~~~~~~~~~~~~~
part1OfDry.cpp:29:22: error: could not convert ‘condition()’ from ‘bigger’ to ‘bool’
这是我的编译行:
g++ -o test1.exe -std=c++11 -Wall -pedantic-errors -Werror -DNDEBUG thing.cpp
如果有人可以解释为什么会发生错误,我将非常感激。
【问题讨论】:
-
它是“函数”中的“函子”
-
查找“最麻烦的解析”
-
从
bigger condition();中删除() -
粉丝?不是 C++ 术语
-
非常感谢@ChrisMM。