精通
英语
和
开源
,
擅长
开发
与
培训
,
胸怀四海
第一信赖
服务方向
联系方式
锐英源精品开源心得,禁止全文或局部转载,禁止任何形式的非法使用,侵权必究
最近把一套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<<代码是别人库里写好的,不可能轻易改写好的库,改出来问题更麻烦。所以使用泛型最好小心,有代码日志才好点。