我对C ++很陌生,认为这个问题从根本上与指针有关;研究过,但找不到与下面的背景相关的任何明显的东西。
我已经概述了我的代码结构,以突出我遇到的问题,即尝试通过指针Node
访问嵌套的isLeftChild
类成员函数root
到常量{{ 1}};我可以使Node
成为isLeftChild
类的成员函数,但感觉Tree
成为嵌套isLeftChild
类的成员函数更合乎逻辑。
Node
如何从class Tree {
class Node {
public:
bool isLeftChild(void);
};
Node const* root;
public:
void traverse(Node const* root);
};
void Tree::traverse(Node const* root) {
// *** Line below gives compile error: request for member 'isLeftChild' in
// 'root', which is of non-class type 'const Tree::Node*'
if ( root.isLeftChild() ) {
cout << "[is left child]";
}
}
bool Tree::Node::isLeftChild(void){
bool hasParent = this->parent != NULL;
if ( hasParent ) {
return this == this->parent->left;
} else {
return false;
}
}
成员函数中访问此成员函数?问题是否围绕traverse
是指针的事实?
谢谢,Alex
答案 0 :(得分:1)
Chenge this:
root.isLeftChild()
到此:
root->isLeftChild()
操作员.
将作用于对象。
操作符->
将作用于指向对象的指针。与root
一样。
这就是错误告诉你root
是非类型的原因。它是指针类型。
答案 1 :(得分:1)
由于你有一个指向const参数的指针,你只能在其上调用const方法。
尝试
bool isLeftChild() const;
并将“const”添加到实现中。