重载CList中的==运算符 我把CList中的==进行重载BOOL operator == (const CControlPanel &pElement) const{ return this==&pElement;}用于两个对象之间的判断,但总是判断不了,不知为何? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 应该判断CList中的对象的值或成员是否相等 可以像你先前写的BOOL operator == (const CControlPanel &pElement) const { return this==&pElement ?TRUE:FALSE; } return this==&pElement; //这就是判断2个对象地址是否相等 返回FALSE说明你用==判断的两个对象的地址是不同的,代码怎么写的? 我用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")); 对象相等需要对象里的每个成员都相等才行,所以你最好一个个判断return this==&pElement; 这句不足与确定两者相等;if((this.a==pElement.a)//成员每个都等才行 &&(this.b==pElement.b) &&(this.c==pElement.c) &&(this.d==pElement.d))return TURE; 我的代码如下: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一直找不到所要找的对象 这个。。这个operator==应该是放到CControlPanel类里面去重载吧。。你要自定义一个CControlPanel的派生类,在里面定义operator==,似乎CList的Find只跟他的元素CControlPanel有关跟你的CControlContainer无关吧 你这个代码拿一个CControlContainer和另一个CControlPanel比较自然永远是FALSE 不好意思,写错了,应该是class CControlPanel{public: BOOL operator == (const CControlPanel &pElement) const { return this==&pElement; } ……………… } 这样也不行阿,还是FALSE 哦,明白你的意思了。你使用CList作为容器,保存CControlPanel对象,如果用地址比较的话是没法用Find找到的(因为储存后不见得是你原来那个对象了),如果你不想用10L所说的对象比较的话,那你要存储指针CList <CControlPanel*,CControlPanel*&> m_aControlpanels; 哪位用过Google的 Glog,如何设置输出日志输出目录和日志名称 用MFC做了一个小游戏,现在需要解决“重新开始”的问题 能够在DLL中调用其他DLL 吗? 请教各位朋友,都进来发表一下见解吧 表格控件是那个东西 模拟键盘消息alt+s, 如何做? 求教拷贝构造函数 如何访问另一个正在运行的程序的内存区域?100分哦 什么书是专门讲sdk编程的?(当然是问好书,详细加清晰的) ★★★如何修改项目工程的名字?? 测试ODBC连接 如想在CListCtrl第三列显示图标,怎么实现?另:谁有VC++ 开发经验宝典 第五章的源码?
BOOL operator == (const CControlPanel &pElement) const
{
return this==&pElement ?TRUE:FALSE;
}
return this==&pElement; //这就是判断2个对象地址是否相等
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"));
&&(this.b==pElement.b)
&&(this.c==pElement.c)
&&(this.d==pElement.d))
return TURE;
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一直找不到所要找的对象
这个。。这个operator==应该是放到CControlPanel类里面去重载吧。。你要自定义一个CControlPanel的派生类,在里面定义operator==,似乎CList的Find只跟他的元素CControlPanel有关跟你的CControlContainer无关吧
BOOL operator == (const CControlPanel &pElement) const
{
return this==&pElement;
}
………………
} 这样也不行阿,还是FALSE
CList <CControlPanel*,CControlPanel*&> m_aControlpanels;