Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 重载运算符==和!=:编译器抱怨模棱两可_C++_Operators_Operator Overloading_Conditional Operator - Fatal编程技术网

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::