编译错误 error C2451: “std::_Unforced”类型的条件表达式是非法的
part 1
编译器 vs2015 VC++。
完整的错误信息粘贴如下:
d:\program files (x86)\microsoft visual studio 14.0\vc\include\algorithm(43): error C2451: “std::_Unforced”类型的条件表达式是非法的
完整代码:
struct Bigger {
bool operator() (vector<string>::size_type lhs, vector<string>::size_type rhs) { // 第一个形参是型别是 Bug
return lhs > rhs;
}
};
void biggies(vector<string>& words, const vector<string>::size_type sz)
{
auto beg = words.begin();
while (beg != words.end())
{
auto temp =
find_if(beg, words.end(), bind(Bigger(), placeholders::_1, sz)); // 这里引发的错误
cout << *temp << " ";
beg = ++temp;
}
cout << endl;
}
出处:《C++ primer 5th》习题 14.40。
part 2 正文
意图:
调用函数对象 Bigger() 来处理 find_if() 算法遍历的两个参数,比较两者的大小关系。
错误代码:
struct Bigger {
bool operator() (vector<string>::size_type lhs, vector<string>::size_type rhs) { // 第一个形参是型别是 Bug
return lhs > rhs;
}
};
错误原因:
错误的地方在于 Bigger::operator() 的形参列表和 find_if() 的三个参数不符合。
Bigger::operator() (vector<string>::size_type, vector<string>::size_type)
与find_if()的第三个参数—— bind(Bigger(), placeholders::_1, sz) ——匹配的形参列表应该是:
Bigger::operator() (const string&, vector<string>::size_type)
如何改正:
struct Bigger {
bool operator() (const string& lhs, vector<string>::size_type rhs) {
return lhs.size() > rhs;
}
};
第一个参数改写成 const string& 型别。
(全文完)
编译错误 error C2451: “std::_Unforced”类型的条件表达式是非法的的更多相关文章
- Ubuntu12.04安装64位系统出现编译错误error while loading shared libraries: libz.so.1: cannot open shared object file: No such file or dir
问题: Ubuntu12.04安装64位系统出现编译错误error while loading shared libraries: libz.so.1: cannot open shared obje ...
- VS2110。VC++编译错误"error LNK2005: 已经在 XXX.obj 中定义的问题"
有时候我们会在头文件当中定义一些全局变量或者全局函数,这种做法会比较方便,但有时候会出现“编译错误"error LNK2005: 已经在 XXX.obj 中定义的问题"的链接问题. ...
- Thrift-0.10.0 CenOS 7 编译错误 error: expected ')' before 'PRIu32'
Thrift-0.10.0 CenOS 7 编译错误 error: expected ')' before 'PRIu32' 在编译Thrift的时候,无论是Apache官网tar包,还是Github ...
- C++编译错误--C++连接redis:编译错误error C2371: “off_t”: 重定义;不同的基类型
编译错误:对于编译C++调用hiredis编译错误:error C2371: “off_t”: 重定义:不同的基类型,如下图: 可能的解决方案: 1. 因为hiredis预处理器定义了_OFF_T_D ...
- 编译错误error: invalid&nbsp…
昨天遇到一个莫名其妙的编译错误,以前没有见过,而且代码流程看起来也没有太多的奇异之处.后来忍无可忍,百度了下,发现别人也有遇到这个错误的,他的解决方法是:少了"}". 嘿嘿,我开始 ...
- bullet, iOS真机编译错误error: identifier or immediate expression expected解决方法
刚才发现c3dEngine2(http://git.oschina.net/wantnon2/c3dEngine2 或 https://github.com/wantnon2/c3dEngine2)的 ...
- Qt5.编译错误.error: C2338: The slot requires more arguments than the signal provides.
1.Qt563x86vs2015,遇到如下 编译错误: error: C2338: The slot requires more arguments than the signal provides. ...
- IAR编译错误Error[e16]: Segment ISTACK (size: 0xc0 align: 0) is too long for segment definition. At least 0x8 more bytes needed. The problem occurred while processing the segment
问题:个人使用的是IARV9.10编译CC2541的工程,没有做任何修改,直接编译出现如下错误 Error[e16]: Segment ISTACK (size: 0xc0 align: 0) is ...
- VC++编译错误error C2065: “HANDLE”: 未声明的标识符及添加winbase.h后提示winbase.h(243): error C2146: 语法错误: 缺少“;”(在标识符“Internal”的前面)的解决办法
问题描述: VC++程序编译时提示错误:error C2065: “HANDLE”: 未声明的标识符等众多错误提示,如下所示: error C2065: “HANDLE”: 未声明的标识符 error ...
随机推荐
- Kettle 4.2源码分析第三讲--Kettle 转换机制transformation介绍
转换机制 每个转换步骤都是ETL数据流里面的一个任务.转换步骤包括输入.处理和输出.输入步骤从外部数据源获取数据,例如文件或者数据库:处理步骤处理数据流,字段计算,流处理等,例如整合或者过滤.输出步骤 ...
- spring中的BeanFactory与ApplicationContext的作用和区别
BeanFactory 和ApplicationContext Bean 工厂(com.springframework.beans.factory.BeanFactory)是Spring 框架最核心的 ...
- 《Nginx - 变量》- log_format/核心变量
一:log_format - 概述 - log_format 用于管理 Nginx 的详细信息,日志管理等信息,很多都是基于这个来实现. - 可配置参数 $remote_addr 客户端地址 $rem ...
- 涉及不同实例不同数据库的同一条sql语句
exec sp_configure 'show advanced options',1 reconfigure exec sp_configure 'Ad Hoc Distributed Querie ...
- LRU算法 缓存淘汰策略
四种实现方式 LRU 1.1. 原理 LRU(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也 ...
- Linux下设置python脚本文件为服务
(最简单的方式nohup python xxx.py) ------------------------------------------------------------------------ ...
- iota 币产生私钥的方法
iota 币的官网是 iota.org, iota 的官网推荐的钱包地址是: https://github.com/iotaledger/wallet iota 币产生私钥是没有什么特殊的要 ...
- modelform和modelserializer
modelform modelform比form强悍很多
- 实习培训——Servlet(5)
实习培训——Servlet(5) 1 Servlet 简介 Servlet 是什么? Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HT ...
- 5分钟实现集群-NTP时间同步
环境:VMware-Workstation-12-Pro,Windows-10,CentOS-7.5,Xshell5 NTP基本介绍 NTP(Network TimeProtocol,网络时间协议), ...