C++ 重载运算符==和!=:编译器抱怨模棱两可
我有以下代码:C++ 重载运算符==和!=:编译器抱怨模棱两可,c++,operators,operator-overloading,conditional-operator,C++,Operators,Operator Overloading,Conditional Operator,我有以下代码: 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_str
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!
}
bool运算符==(常量Inc::CReminderItem&Item1,常量Inc::CReminderItem&Item2)
{
bool bDate=false,bDesc=false,bInfo=false,bWeekday=false;
如果(Item1.m_日期==Item2.m_日期)
bDate=真;
if(Item1.m_strDescription==Item2.m_strDescription)
bDesc=真;
if(Item1.m_strInfoShort==Item2.m_strInfoShort)
bInfo=true;
如果(Item1.m_nWeekday==Item2.m_nWeekday)
bWeekday=true;
返回(bDate&&bDesc&&bInfo&&bWeekday);
}
接线员=(const Inc::CReminderItem&Item1,const Inc::CReminderItem&Item2)
{
return!(Item1==Item2);//可能您在类范围内定义了一个操作符==
,如
class CReminderItem {
public:
bool operator==(CReminderItem const&) const;
};
这对于全局操作符重载来说是不明确的。首先,如果它是“不明确的”,我希望其他的操作符==
是不明确的
存在于某个地方。但是很难说任何特定的编译器是什么
真的想告诉你它的错误信息
第二,你真的没有显示足够的代码让任何人说出什么是正确的
错误。有许多可能的错误:
声明了friend,并且这些定义位于不同的名称空间中,
如果Inc
,朋友的签名会有细微的不同,等等
在命名空间中,这些运算符也必须位于Inc
中。否则,
您已经在朋友声明的Inc
中声明了运算符==
,并且
这里的全局命名空间中有一个运算符==
结果产生歧义
(我通常的处理方法是定义一个成员函数,
isEqual
,并让操作符==
和操作符!=
调用它。那
顺便说一句,不需要朋友声明。)编译器应该告诉您一些可能的候选对象是……否则,可能存在一个成员函数,或者您对CReminderItem
进行了一些隐式转换?它是否说哪些可能的候选对象导致了歧义?既没有可能的候选对象,也不应该有任何不合法的转换(VisualStudio 2010)-O-我的错误。一个声明足以编译这样一个错误。我想知道为什么编译认为这是模棱两可的,而不是重新定义的。因为<代码> BoOL运算符==(CurMyReTysCist&)const < /C> >与<代码> BooCyMyReIt::