锐英源软件
第一信赖

精通

英语

开源

擅长

开发

培训

胸怀四海 

第一信赖

当前位置:锐英源 / 开源技术 / C++开源社区 / 没有找到接受类型的右操作数的运算符

服务方向

人工智能数据处理
人工智能培训
kaldi数据准备
小语种语音识别
语音识别标注
语音识别系统
语音识别转文字
kaldi开发技术服务
软件开发
运动控制卡上位机
机械加工软件
软件开发培训
Java 安卓移动开发
VC++
C#软件
汇编和破解
驱动开发

联系方式

固话:0371-63888850
手机:138-0381-0136
Q Q:396806883
微信:ryysoft

锐英源精品开源心得,禁止全文或局部转载,禁止任何形式的非法使用,侵权必究

 

没有找到接受类型的右操作数的运算符

背景

最近把一套C++代码拿出来用,在VS2010下编译遇到如下错误:。

错误    19  error C2679: 二进制“<<”: 没有找到接受“const CStringArray”类型的右操作数的运算符(或没有可接受的转换)        

<<代码是在泛型类头文件里,代码如下:

template<typename T>
Record& operator<<(const T& data)
{
using namespace plog::detail;

m_message << data;
return *this;
}

熟练的程序员,明显知道上面泛型内代码是没问题的,但不熟练的可能就难住了。

解决过程

泛型代码报错,但并不是泛型类有问题,而是用泛型类的地方有问题,只追查泛型类代码,是解决不了这个问题的。这样的问题不是本人开发的很难找,这里说个技巧,注意输出里的错误代码文件名,在代码文件里面慢慢找<<。

泛型代码报错不只出在<<函数里,可能别的函数也出,相当于函数调用行传入的对象类型和泛型类函数参数类型型不兼容造成的。本次错误幸亏我记的上次改代码位置,并且目标明显才好解决,如果是复杂环境下,就很难找,对错误代码文件里搜索结果要一一对比,耐心查找。

 

泛型类型参数及约束,可能会解决此问题,但是上面Record& operator<<代码是别人库里写好的,不可能轻易改写好的库,改出来问题更麻烦。所以使用泛型最好小心,有代码日志才好点。

友情链接
版权所有 Copyright(c)2004-2021 锐英源软件
公司注册号:410105000449586 豫ICP备08007559号 最佳分辨率 1024*768
地址:郑州大学北校区院(文化路97号院)内