为什么即使我没有进行转换,此代码中也有转换?
Why is there a conversion in this code even though I'm not doing one?
我刚刚在大学完成了一门关于 c++ 的课程,我们得到了最后的作业。(我只是想澄清一下:这绝不是我要求你为我做功课,我只是需要一些代码方面的帮助。
赋值的第一部分是编写一个泛型函数,该函数获取一个函子和 2 个索引:函子是一个条件,索引指向容器中的第一个元素和容器中最后一个元素之后的位置。该函数需要检查容器中有多少对元素满足函子的条件。
这是我的代码:
#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{};
或者,正如0x5453所建议的那样,简单地
bigger condition;
而不是
bigger condition();
问题:从错误消息中可以看出,bigger condition();
被解释
Condition = bigger (*)()
作为返回bigger
的函数的声明。
搜索"最令人烦恼的解析"以获取澄清。
停止在不需要的地方添加括号。
#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);
}
相关文章:
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 在混合代码库中将C转换为C++时出现许多包含错误
- 为什么g++在未执行的代码处标记强制转换错误
- 用于将C++代码转换为 Web 程序集的脚本未终止
- 16 位到 10 位转换代码说明
- 以下对二进制转换代码的小数如何工作
- 中缀到后缀表达式转换代码不起作用
- C++中的十进制到十六进制转换代码
- 这个后缀转换 C++ 代码的中缀有什么问题
- 如何优化 YUV 到 RGB 颜色转换代码
- Win32 键转换代码输出不需要的按键
- C++ NV12 到 RGB24 转换代码
- 转换代码以使用矢量
- C++货币转换代码
- 这段c++类型转换代码在做什么?
- 缓慢运行的方向转换代码
- 在c++中转换代码页
- 转换代码从SSE2到SSE4在C
- MATLAB到c++的行转换代码
- 如何编写可转换代码,32位/64位