错误代码:
struct BinaryTreeNode {
ElemType data;
BinaryTreeNode<ElemType> *LChild, *RChild;
ElemType Getdata() {
return data; //取得结点中的数据
}
};
bool BinaryTree<ElemType>::checkEqual(const BinaryTreeNode<ElemType> *root1, const BinaryTreeNode<ElemType> *root2) {
if(root1->Getdata()==root2->Getdata()) {
...
} else
return false;
}
error: passing 'const BinaryTreeNode<std::__cxx11::basic_string<char> >' as 'this' argument discards qualifiers [-fpermissive]|
改动之后:
struct BinaryTreeNode {
ElemType data;
BinaryTreeNode<ElemType> *LChild, *RChild;
ElemType Getdata()const {//加了const
return data;
}
};
bool BinaryTree<ElemType>::checkEqual(const BinaryTreeNode<ElemType> *root1, const BinaryTreeNode<ElemType> *root2) {
if(root1->Getdata()==root2->Getdata()) {
...
} else
return false;
}
原因:checkEqual(const BinaryTreeNode<ElemType> *root1, const BinaryTreeNode<ElemType> *root2)的参数count是const的,在函数内部调用了Getdata();但是Getdata()是非const的。它只能调用 const 函数。尽管那个函数并不会修改参数的值。
注意函数的 const 是写在最后,如果写在 bool 前表示的是返回值为 const 的。
另外
原:if(!root1&&root2||root1&&!root2)
有:warning: suggest parentheses around '&&' within '||' [-Wparentheses]|
改:if((!root1&&root2)||(root1&&!root2))
以后记得&&与||一起用的时候记得加括号,不然会有warning