error c2678解决方法

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

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: C语言error C2065是指在编译过程中出现了未声明的标识符错误。解决方法如下: 1.检查代码中是否有拼写错误或语法错误。 2.检查是否正确包含了所需的头文件。 3.检查是否正确声明了变量或函数。 4.检查是否正确使用了作用域符号。 5.检查是否正确使用了宏定义。 6.检查是否正确使用了指针。 7.检查是否正确使用了结构体。 8.检查是否正确使用了枚举类型。 以上是解决C语言error C2065的一些方法,希望能对你有所帮助。 ### 回答2: C语言error C2065是一个常见的编译错误,意味着标识符未被识别或未声明。这一错误一般出现在变量或函数名没有正确声明或拼写错误的情况下。 当遇到error C2065时,一般有以下几种解决方法: 1.确认标识符是否正确声明。例如,如果错误提示是“未声明的标识符”,则应该检查相关代码中是否有该标识符的声明或是否拼写错误。 2.在使用标识符前进行声明。如果标识符还没有声明,可以在代码的开头或其他合适的位置进行声明,以确保编译器能够正确识别标识符。 3.检查头文件是否正确引用。如果标识符在头文件中定义,需要在相关代码中正确地引用该头文件以确保编译器能够识别标识符。 4.检查代码中是否存在重复声明。如果在同一作用域内多次声明同一个标识符,编译器将无法识别正确的标识符。 5.检查代码中的括号和引号是否正确。如果代码中存在错误的括号或引号使用方式,可能导致编译器无法正确识别标识符。 总的来说,解决error C2065错误需要仔细查找代码中的错误,并对可能引起该错误的因素进行检查和纠正。只有通过仔细排查并纠正错误才能让代码成功地编译。 ### 回答3: C语言Error C2065是一个编译时错误,它表示标识符未声明。这通常是由于以下原因导致的:未正确引用头文件、未对变量或函数声明进行正确的命名、变量或函数声明位于代码的顶部。 为了解决这个问题,我们需要采用以下方法: 1.检查头文件 首先,检查代码中的每个头文件引用是否都正确。这个错误可能是由于未包含某个头文件,导致编译器未能正确识别标识符。确保所有文件都引用了必要的头文件。 2.检查命名 如果有一个变量或函数声明的命名是错误的或未定义的,则会收到这个错误。确保所有变量名和函数名都正确拼写。 3.将变量和函数声明放在顶部 在C语言中,变量和函数使用时必须首先声明。如果您在使用变量或函数之前没有在代码中声明它们,那么就会收到这个错误。在您的代码中,将变量和函数声明放在主函数的顶部,这可以避免很多错误。 总之,如果您遇到C语言Error C2065,您需要仔细检查代码中的头文件、命名和声明。一旦找到错误,及时进行纠正,然后重新编译您的代码。这样就可以成功解决这个问题,让您的C语言程序慢慢地运行起来。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值