c++中const限定出错

chenzhuoxue 2014-08-19 09:32:27

首先本人是在写一个二叉查找树中的查找出现的问题。

问题在代码中的 find函数的注释部分

部分代码如下:
typedef int T;

class Bstree //左子树小于节根, 右子树不小于根
{
public:
struct Node
{
T data; //树节点保存的数据
Node* L; //树节点的左子树的地址
Node* R; //树节点的右子树的地址
Node(const T& t = T()):data(t), L(), R(){}
};
typedef Node* tree;
private:
tree pRT; //保存树的根节点
int n; //保存树的节点数

public:
Bstree():pRT(NULL), n(){}
~Bstree(){clear();}
void insert(const T& t){ insert(pRT, t); n++; }
void travel()const{ travel(pRT); cout<<endl;}
int size()const { return n;}
void clear(){ clear(pRT); n = 0;}
/* 问题在这里
* 1. 当 tree& find(const T& t) const{ return find(pRT, t);}
* 因为我不修改数据所以加一个const限定,就出错,错误如下
* 2. 把const去掉就ok了,请问问什么呢?我又没有修改数据
*/
tree& find(const T& t){ return find(pRT, t);} //为什么加一个const就出错

public:
static void insert(tree& prt, const T& t);
void travel(const tree& prt) const;
void clear(tree &pst);
tree& find(tree &pst, const T& t);


};


错误:
e:\debuging\danei\danei\danei\bsorttree.cpp(34): error C2663: “Bstree::find”: 2 个重载没有“this”指针的合法转换

还有当我底下一个一个两个参数的find加一个const时:tree& find(tree &pst, const T& t) const;
错误:
e:\debuging\danei\danei\danei\bsorttree.cpp(34): error C2664: “Bstree::tree &Bstree::find(Bstree::tree &,const T &) const”: 不能将参数 1 从“const Bstree::tree”转换为“Bstree::tree &”
1> 转换丢失限定符

...全文
146 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenzhuoxue 2014-08-26
  • 打赏
  • 举报
回复
引用 2 楼 YGguang 的回复:
const型的对象只能调用const型的函数,所以你这样属于间接调用了非const型的函数,编译器检测出来了。
恩 ,记住了, 谢谢你的回答 。对const用的还是不够熟, 一不小心就出错了!
YGguang 2014-08-24
  • 打赏
  • 举报
回复
const型的对象只能调用const型的函数,所以你这样属于间接调用了非const型的函数,编译器检测出来了。
YGguang 2014-08-24
  • 打赏
  • 举报
回复
可能是函数里调用的重载find不是cons类型的,编译器以为你会进行修改,所以出错吧!

13,871

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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