C++成员函数递归,必须加Const修饰符?

u010273113 2015-04-30 09:29:39
做OJ题,实现一个层次文件目录,我弄一个Dir类,内部有一个set<Dir>集合
class Dir{
public:string name;
Dir* parent;
set<Dir> dirs;
Dir(string n,Dir* p){
name = n;
parent = p;
}
Dir* findDir(string DirName)];
bool operator < (const Dir &d) const
{
return (name.compare(d.name)>0);
}
};

我为了实现搜索指定Name的Dir,有如下方法
Dir* Dir::findDir(string DirName)
{
//先看看是否是自己
if(DirName.compare(name)==0)
{
return (Dir*)this;
}
//找不到就遍历子目录
set<Dir>::iterator it = dirs.begin();
while(it!=dirs.end())
{
Dir* result= it->findDir(DirName);//此处编译异常,
//IntelliSense: 对象包含与成员函数不兼容的类型限定符

if(result!=NULL)
return result;
it ++;
}
return NULL;
}

如果该方法改为Const方法,即
Dir* Dir::findDir(string DirName)const

就不报错,可以编译通过.
初学C++者,想问下大家
Dir* result= it->findDir(DirName);这句话 递归调用自身,如果findDir 这个方法不是Const,为什么会编译异常呢
...全文
205 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
fly_dragon_fly 2015-05-04
  • 打赏
  • 举报
回复
引用 3 楼 u010273113 的回复:
[quote=引用 1 楼 fly_dragon_fly 的回复:] set<Dir> dirs; 中Dir是键值,不能更改,finddir如果没有声明const,*it的对象是const不能调用非const的成员函数
你好,刚学C++ 有点不明白 iterator和const_iterator的区别不是 const_iterator指向的内容不可以修改吗? iterator指向的内容也不可以修改? 为什么*it是const的?[/quote]set不能更改,要么记住,要么去找红黑树,看实现原理
fallening 2015-05-03
  • 打赏
  • 举报
回复
引用 3 楼 u010273113 的回复:
[quote=引用 1 楼 fly_dragon_fly 的回复:] set<Dir> dirs; 中Dir是键值,不能更改,finddir如果没有声明const,*it的对象是const不能调用非const的成员函数
你好,刚学C++ 有点不明白 iterator和const_iterator的区别不是 const_iterator指向的内容不可以修改吗? iterator指向的内容也不可以修改? 为什么*it是const的?[/quote] 楼主其实这种问题去搜下 set 的文档就很容易得到答案了;我帮你贴一下 C++ reference 那边的结果(http://www.cplusplus.com/reference/set/set/)

member type   definition	                                                         notes
iterator             a bidirectional iterator to const value_type      * convertible to const_iterator
const_iterator   a bidirectional iterator to const value_type      *
下次要自己动手了哦
u010273113 2015-05-02
  • 打赏
  • 举报
回复
引用 1 楼 fly_dragon_fly 的回复:
set<Dir> dirs; 中Dir是键值,不能更改,finddir如果没有声明const,*it的对象是const不能调用非const的成员函数
你好,刚学C++ 有点不明白 iterator和const_iterator的区别不是 const_iterator指向的内容不可以修改吗? iterator指向的内容也不可以修改? 为什么*it是const的?
此后三年 2015-04-30
  • 打赏
  • 举报
回复
这样看没看出什么问题, 我只能说括号后面的const是修饰this指针的。 set<Dir> 是个什么。
fly_dragon_fly 2015-04-30
  • 打赏
  • 举报
回复
set<Dir> dirs; 中Dir是键值,不能更改,finddir如果没有声明const,*it的对象是const不能调用非const的成员函数

64,647

社区成员

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

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