精通
英语
和
开源
,
擅长
开发
与
培训
,
胸怀四海
第一信赖
服务方向
联系方式
锐英源精品原创,禁止转载和任何形式的非法内容使用,违者必究
报错的源代码行是plog开源项目中的一个函数里的代码:
template<typename T> Record& operator<<(const T& data)
{
using namespace plog::detail;m_message << data;
return *this; }
这代码在VS2010和VS2019下其它项目里正常编译通过,其它项目也是复杂环境下的项目,所以遇到问题很奇怪,配套报告的问题还有:
error C2678: 二进制“<<”: 没有找到接受“std::wstringstream”类型的左操作数的运算符(或没有可接受的转换)
表面意思是data和<<左边的wstringsteam不匹配,但是在其它项目里能成功编译,所以不可能不匹配,虽然data类型是模板类型,但现在C++标准和C++编译器都比较强大了,其它项目编译同样的代码没问题,这肯定不是问题。
后来只能归于环境问题,因为在编译项目里有其它源代码文件里有<<的重载,可能这重载和这里出现的<<的有冲突。
因为是日志功能,不是重要功能,我就把日志功能代码注释了不用,把问题解决了。
想想如果<<上能够带上命名空间,估计会解决这问题,但是<<带命名空间还没见过,希望C++标准制订人看到后能够改进下。