我把CList中的==进行重载
BOOL operator == (const CControlPanel &pElement) const
{
    return this==&pElement;
}
用于两个对象之间的判断,但总是判断不了,不知为何?

解决方案 »

  1.   

    应该判断CList中的对象的值或成员是否相等
      

  2.   

    可以像你先前写的
    BOOL operator == (const CControlPanel &pElement) const 

        return this==&pElement ?TRUE:FALSE; 
      

  3.   


     return this==&pElement; //这就是判断2个对象地址是否相等 
      

  4.   

    返回FALSE说明你用==判断的两个对象的地址是不同的,代码怎么写的?
      

  5.   

    我用CEdit重载测试,执行正确:
    class CMyEdit : public CEdit
    {
    //...
    BOOL operator==(const CMyEdit &editor) const;
    //...
    };
    BOOL CMyEdit::operator==(const CMyEdit &editor) const
    {
    return this==&editor;
    }
    //...
    CMyEdit m_edit1;
    CMyEdit m_edit2;
    if (m_edit1 == m_edit2)
    AfxMessageBox(_T("YES"));
    else
    AfxMessageBox(_T("NO"));
    if (m_edit1 == m_edit1)
    AfxMessageBox(_T("YES"));
    else
    AfxMessageBox(_T("NO"));
      

  6.   

    对象相等需要对象里的每个成员都相等才行,所以你最好一个个判断return this==&pElement; 这句不足与确定两者相等;if((this.a==pElement.a)//成员每个都等才行
      &&(this.b==pElement.b)
      &&(this.c==pElement.c)
      &&(this.d==pElement.d))
    return TURE;
      

  7.   

    我的代码如下:CList<CControlPanel,CControlPanel&> m_aControlpanels;class CControlContainer{public:
    BOOL operator == (const CControlPanel &pElement) const 

        return this==&pElement; 

    ………………
    }void CControlContainer::Add(CControlPanel &ctl)
    {
    m_aControlpanels.AddTail(ctl);
    }void CControlContainer::Remove(CControlPanel &ctl)
    {
    m_aControlpanels.RemoveAt(m_aControlpanels.Find(ctl));
    }是因为使用了CList中的Find函数才重载==,可是Find一直找不到所要找的对象
      

  8.   


    这个。。这个operator==应该是放到CControlPanel类里面去重载吧。。你要自定义一个CControlPanel的派生类,在里面定义operator==,似乎CList的Find只跟他的元素CControlPanel有关跟你的CControlContainer无关吧
      

  9.   

    你这个代码拿一个CControlContainer和另一个CControlPanel比较自然永远是FALSE
      

  10.   

    不好意思,写错了,应该是class CControlPanel{public: 
    BOOL operator == (const CControlPanel &pElement) const 

        return this==&pElement; 

    ……………… 
    } 这样也不行阿,还是FALSE
      

  11.   

    哦,明白你的意思了。你使用CList作为容器,保存CControlPanel对象,如果用地址比较的话是没法用Find找到的(因为储存后不见得是你原来那个对象了),如果你不想用10L所说的对象比较的话,那你要存储指针
    CList <CControlPanel*,CControlPanel*&> m_aControlpanels;