error c2678解决方法
2015-11-30 14:01
435 查看
使用UE4时发生
error C2678: binary ‘==’ : no operator found which takes a left-hand operand of type ‘const HUDMessage’ (or there is no acceptable conversion)
最后可以定位到这里
可以看到,是因为使用了TArray的Find方法,但是TArray储存的自定类型HUDMessage没有重载==运算符,所以*Data == Item找不到指定运算符重载。于是添加:
结果还是报错。。。
最后再次仔细阅读错误信息,发现
left-hand operand of type ‘const HUDMessage’
这一句提到接受的操作数是const HUDMessage,于是就明白了,Data在上下文中可以看到,是一个const类型,这时候编译器找的是左右操作数都为const的operator ==,而不是我们重载的左操作数为正常变量,右操作数为const的operator ==。所以解决方法有二:
1.重载函数加const修饰符,本质是使编译时加入的this指针变为const,即左操作数变为const
2.直接全局重载相应运算符
但是因为头文件的include顺序问题方法二总是重定义,于是选择方法一,编译通过。
这个问题告诉我们,还是应该仔细看error。。。
error C2678: binary ‘==’ : no operator found which takes a left-hand operand of type ‘const HUDMessage’ (or there is no acceptable conversion)
最后可以定位到这里
int32 Find(const ElementType& Item) const { const ElementType* RESTRICT Start = GetData(); for (const ElementType* RESTRICT Data = Start, *RESTRICT DataEnd = Data + ArrayNum; Data != DataEnd; ++Data) { if (*Data == Item)//这里 { return static_cast<int32>(Data - Start); } } return INDEX_NONE; }
可以看到,是因为使用了TArray的Find方法,但是TArray储存的自定类型HUDMessage没有重载==运算符,所以*Data == Item找不到指定运算符重载。于是添加:
bool HUDMessage::operator ==(const HUDMessage& a) { return this->text.ToString() == a.text.ToString(); }
结果还是报错。。。
最后再次仔细阅读错误信息,发现
left-hand operand of type ‘const HUDMessage’
这一句提到接受的操作数是const HUDMessage,于是就明白了,Data在上下文中可以看到,是一个const类型,这时候编译器找的是左右操作数都为const的operator ==,而不是我们重载的左操作数为正常变量,右操作数为const的operator ==。所以解决方法有二:
1.重载函数加const修饰符,本质是使编译时加入的this指针变为const,即左操作数变为const
bool HUDMessage::operator ==(const HUDMessage& a)const { return this->text.ToString() == a.text.ToString(); }
2.直接全局重载相应运算符
bool operator ==(const HUDMessage& a,const HUDMessage& b) { return a.text.ToString() == b.text.ToString(); }
但是因为头文件的include顺序问题方法二总是重定义,于是选择方法一,编译通过。
这个问题告诉我们,还是应该仔细看error。。。
相关文章推荐
- 最最最重要的内容!!!!!!
- 开始Admob广告盈利模式详细教程
- 代码文档生成工具-Doxygen生成CHM和RTF图文教程
- Centos下安装nginx rpm包
- 【183】VMware + CentOS 安装教程等
- Bootstrap 警告框(Alert)插件
- genymotion 极速模拟器
- genymotion 极速模拟器
- 感受SoftReference
- Linux下MySQL5.6的修改字符集编码为UTF8(解决中文乱码问题)
- Django程序无法获取数据库更新过的记录
- java用xstream实现xml与实体的互相转化
- 1051. Pop Sequence
- genymotion 极速模拟器
- 【codevs1014/1068】背包型动态规划
- ruby 字符串学习2
- 微信支付认证和ssl-https
- VMware11.1.1及Ubuntu14.04下载安装
- java StringBuffer类型删除最末位字符(使用deleteCharAt方法)
- iOS 开发产生随机数的几个公式