紧急求助关于操作符重载相关的一个程序错误问题

roaring_sea 2006-06-16 09:05:17
最近写了一个集合类,主要实现集合的交、并等运算,可现在程序总通过,请各位大侠帮助一下,下面是部分代码:

头文件:

class CJiHe
{
public:
CJiHe(void);
virtual ~CJiHe();

CJiHe(CStringArray &arrHS);//从字符串创建,自动去除非法字符与重复字符
CJiHe(const CJiHe &other);//拷贝构造


CJiHe operator + (const CJiHe &other) const;//加法重载,并集
CJiHe operator - (const CJiHe &other) const;//减法重载,差集
CJiHe operator * (const CJiHe &other) const;//乘法重载,交集

BOOL FindInString(CStringArray &arrHS, CString strHE);



private:
CStringArray m_arrHouseSet;



};

实现CPP:

//----------JiHe.cpp----------已略去不重要的内容----------
BOOL CJiHe::FindInString(CStringArray &arrHS, CString strHE)
{
//全局函数
//从字符串中查找字符
//有则返回1,无则返回0
int count = arrHS.GetSize();
CString str="";

for (int i = 0; i<count; i++)
{
str = arrHS.GetAt(i);
if (str == strHE)
return TRUE;
}
return FALSE;
}

CJiHe CJiHe::operator + (const CJiHe &other) const
{
//加法重载,并集
CStringArray arrtemp;
int count1 = other.m_arrHouseSet.GetSize();
int count2 = m_arrHouseSet.GetSize();
CString str="";
BOOL bFind = FALSE;
if(count1<=count2)
{

for(int i=0;i<count1;i++)
{
str = other.m_arrHouseSet.GetAt(i);
bFind = FindInString(m_arrHouseSet,str);
if(bFind)
{
arrtemp.Add(str);
}
}
}
else
{
for(int j=0;j<count2;j++)
{
str = m_arrHouseSet.GetAt(j);
bFind = FindInString(other.m_arrHouseSet,str);
if(bFind)
{
arrtemp.Add(str);
}
}

}


return CJiHe(arrtemp);
}


就是在上述函数(“+”运算)中,FindInString总报以下错:
error C2662: 'FindInString' : cannot convert 'this' pointer from 'const class CJiHe' to 'class CJiHe &'
Conversion loses qualifiers

不知何故,请各位大侠帮助!!!谢谢

...全文
80 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Z_X_H 2006-06-16
  • 打赏
  • 举报
回复
重载运算符最好定义成友元的形式. 可参考EFFECTIVE C++.
Z_X_H 2006-06-16
  • 打赏
  • 举报
回复
const成员函数不能调用非const成员函数.你在CJiHe CJiHe::operator + (const CJiHe &other) const中调用bFind = FindInString(m_arrHouseSet,str);因此会出错.去掉重载运算符的const就可以了.

64,681

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧