gpt4 book ai didi

c++ - 重载运算符 == 和 != : compiler moans ambiguity

转载 作者:行者123 更新时间:2023-11-28 03:49:34 25 4
gpt4 key购买 nike

我有以下代码:

bool operator==(const Inc::CReminderItem& Item1, const Inc::CReminderItem& Item2)
{
bool bDate = false, bDesc = false, bInfo = false, bWeekday = false;

if(Item1.m_Date == Item2.m_Date)
bDate = true;
if(Item1.m_strDescription == Item2.m_strDescription)
bDesc = true;
if(Item1.m_strInfoShort == Item2.m_strInfoShort)
bInfo = true;
if(Item1.m_nWeekday == Item2.m_nWeekday)
bWeekday = true;

return(bDate && bDesc && bInfo && bWeekday);
}

bool operator!=(const Inc::CReminderItem& Item1, const Inc::CReminderItem& Item2)
{
return !(Item1 == Item2); // <<--- ambiguous here!
}

两个运算符在类中都被声明为友元运算符。

错误是:

error C2593: 'operator ==' is ambiguous

我不确定,为什么它是模棱两可的 O_o 以及如何解决这个问题。非常感谢任何帮助:)

最佳答案

首先,如果它是“模棱两可”的,我希望其他 operator== 是出现在某处。但是很难说任何特定的编译器是什么真的想用它的错误消息来告诉你。

其次,你真的没有展示足够的代码让任何人说出什么是错误的。有许多可能的错误:friend 被声明并且这些定义在不同的命名空间中, friend 的签名略有不同,等等。如果 Inc 是命名空间,这些运算符也必须在 Inc 中。否则,你在友元声明中的 Inc 中声明了一个 operator==,并且全局命名空间中的 operator==。两者都考虑,其中导致歧义。

(我通常的处理方式是定义一个成员函数,isEqual,并让 operator==operator!= 调用它。那方式,不需要 friend 声明。)

关于c++ - 重载运算符 == 和 != : compiler moans ambiguity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5976075/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com