0

我对 C++ 很陌生,认为这个问题从根本上与指针有关;进行了研究,但找不到与以下上下文相关的任何明显内容。

我已经概述了我的代码结构,以突出我遇到的问题,即试图通过指向常量的指针访问嵌套Node类成员函数;我可以制作类的成员函数,但觉得成为嵌套类的成员函数更合乎逻辑。isLeftChildrootNodeisLeftChildTreeisLeftChildNode

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函数?问题是否围绕root指针这一事实展开?

谢谢,亚历克斯

4

2 回答 2

1

诚此:

root.isLeftChild()

对此:

root->isLeftChild()

操作员.将作用于一个对象

运算符->将作用于指向对象的指针。喜欢root

这就是错误告诉您这root是非类类型的原因。它是一种指针类型。

于 2013-03-31T16:41:44.977 回答
1

由于您有一个指向 const 参数的指针,因此您只能在其上调用 const 方法。

尝试

 bool isLeftChild() const;

并将“const”添加到实现中。

于 2013-03-31T17:13:03.460 回答