函数 const参数

Athos_K 2009-02-17 02:15:18
一段代码如下,现在运行红色两行会提示出错,应该是跟const有关,当我把蓝色的const去掉后,程序就能正常运行了。问题:我觉得不去掉const也没有错呀,为什么不行呢?

class Person
{
private:
char name[20];
int age;
char gender;
public:
Person(){}
void SetName(char *n){strcpy(name,n);}
void SetAge(int a){age=a;}
void SetGender(char g){gender=g;}
char *GetName(){return name;}
int GetAge(){return age;}
char GetGender(){return gender;}
};
void PrintByGender(const vector<Person> &L,char sex)
{
vector<Person>::const_iterator iter=L.begin();
for(;iter!=L.end();iter++)
if((*iter).GetGender()==sex)
cout<<iter->GetName()<<" "<<iter->GetAge()<<endl;

}
...全文
83 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
biweilun 2009-02-17
  • 打赏
  • 举报
回复
加了const当然不行了,没法遍历了
  • 打赏
  • 举报
回复
像1楼说的,const的限制使得迭代器访问受限。
sagegz 2009-02-17
  • 打赏
  • 举报
回复
加了const作为参数只是为了告诉用户vector <Person> &L在函数内部只能够读取,不能修改的.
所以Person类中该是const成员函数就应该写成const类型.
另外const::iterator是常量迭代器,也是只能够读取,并不能对其指向的对象进行修改.
hityct1 2009-02-17
  • 打赏
  • 举报
回复
加了 const 就不能改变L,所以PrintByGender内只能使用带const 的成员函数,如1楼那样。
a_rockboy 2009-02-17
  • 打赏
  • 举报
回复
GetGender()
GetName()
GetAge() 的原因,编译器无法确认它们是否更新了Person内部状态。

使用
char *GetName() const {return name;}
int GetAge() const {return age;}
char GetGender() const {return gender;}
试试

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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