error c2678解决方法
来源:互联网 发布:网络视频配音 编辑:程序博客网 时间:2024/05/16 16:06
使用UE4时发生
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。。。
0 0
- error c2678解决方法
- VS2010错误error C2678
- const+map引起error C2678的解决办法
- error C2678: binary '>>' : no operator found which takes a left-hand operand of type 'std::
- error C2678 binary '<' : no operator found for map<std::string, shared_ptr<Foo>>
- const成员函数重载-error C2678 二进制< 没有找到接受const类型的左操作数的运算符
- MFC中使用自定义CObject派生类重载“=”“==”操作符 error C2248: “CObject::operator =” error C2678: 二进制“==”
- error C2678: 二进制“>>”: 没有找到接受“std::istream”类型的左操作数的运算符(或没有可接受的转换)
- error C2678: 二进制“<”: 没有找到接受“const MyEvent”类型的左操作数的运算符(或没有可接受的转换)
- Error 8 error LNK2005 解决方法
- Xerces panic error 解决方法
- Server Application Error解决方法
- error LNK2019的解决方法
- error LNK2005 解决方法
- mysql error 1093 解决方法
- Error C3867解决方法
- error loading os 解决方法
- Error loading OS解决方法
- genymotion 极速模拟器
- 适用于iOS上的Android风格toast通知
- VS2008中添加Splash screen控件
- CGI编程、SMTP发送邮件(快速入门篇)
- Ubuntu系统重装后必做的事
- error c2678解决方法
- [Javascript Practice] 正则表达式 以及 其他小练习
- Xcode7 下的 URL scheme 的使用注意事项
- EventBus的使用详解(一)--初步使用EventBus
- 虚拟机检测技术剖析
- 黑马程序员—Java基础—File类
- Java进阶思考
- Android应用如何支持屏幕多尺寸多分辨率问题
- AJAX读取日期