error c2678解决方法

news/2025/1/15 13:42:46/

使用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。。。


http://www.ppmy.cn/news/312480.html

相关文章

Caused by: org.apache.parquet.io.ParquetDecodingException: Can‘t read value in column [result, label

写入hdfs是没有问题&#xff0c;但是读取的时候会报这个错 Caused by: org.apache.parquet.io.ParquetDecodingException: Cant read value in column [result, label_id] INT64 at value 2678 out of 2678, 2678 out of 2678 in currentPage. repetition level: 1, definitio…

ZZULIOJ-2678 向着星辰与深渊,欢迎来到冒险家协会

题目描述 凯瑟琳又让可怜的打工人sj学姐去欺负可怜的丘丘人和史莱姆了&#xff0c;而且还是去欺负一群冰冰凉凉的大团子&#xff01;但是sj学姐不慌&#xff0c;她愉快的带着蹦蹦跳跳的满级可莉去为&#xff08;快&#xff09;民&#xff08;乐&#xff09;除&#xff08;炸&am…

2678 凌波微步(枚举)

你在一个二维空间里的(xMe,yMe)位置&#xff0c;你的家在(xHome,yHome)位置。每一秒钟你可以选择从你当前位置向上下左右四个方向之一移动一个单位。你现在归心似箭&#xff0c;觉得这么走很慢&#xff0c;所幸你有技能“凌波微步”&#xff0c;在这片二维空间中&#xff0c;有…

uvalive 2678

题意&#xff1a;给出一个长为n的序列&#xff0c;和目标值s&#xff0c;找出最短序列和刚好大于等于目标值&#xff0c;输出序列长度。 题解&#xff1a;枚举起点终点时间复杂度高&#xff0c;可以枚举终点&#xff0c;f[i]表示序列第1个到第i个数字的和&#xff0c;因为f数组…

科研文献|中国的肠道微生物群及其与主食类型、民族和城市化的关系

中国的肠道微生物群及其与主食类型、民族和城市化的关系 Chinese gut microbiota and its associations with staple food type, ethnicity, and urbanization 研究介绍 肠道微生物群对人类健康和疾病影响重大。目前我国仍然缺乏全国性的中国肠道微生物群基线研究。肠道微生物…

Live Archive 2678 Subsequence

///方法一&#xff1a;前缀和 二分 #include <iostream> #include <cstdio> #include <algorithm> #include <cstring> using namespace std; #define min(a,b) (a < b ? a : b)const int maxn 100090; int a[maxn]; int b[maxn]; int main() {i…

UVALive - 2678 Subsequence 推理

题目大意&#xff1a;有n个正整数组成一个序列&#xff0c;给定整数S&#xff0c;求长度最短的连续序列&#xff0c;使它们的和大于等于S 解题思路&#xff1a;用一个数组sum记录前n个数的和&#xff0c;这样就可以得到任何一段数字的连续和了&#xff0c;在for一遍&#xff0…

HOJ Stars 2678

这个题与poj的思路有点类似 点击打开poj Stars #include <iostream> #include <cstring> #include <algorithm>using namespace std;const int MAXN 1010; int c[MAXN][MAXN];struct Node {int x, y, z; }stars[15010];int cmp(Node a, Node b) {if(a.z !…