奇怪的c ++变量声明错误,说一个类本身就是一个私有成员

时间:2014-05-05 16:33:49

标签: c++

我正在使用解析器来构建抽象语法树。

我的所有节点都有这个Node基类。

// Base for all nodes
class Node {
  public:
    virtual ~Node();
    virtual int position() = 0; // code string index of first character associated with this Node
    virtual int end() = 0; // code string index of first immediately after the last character associated with this Node
};

其中一个子类是表达式节点:

// Expression node
class ExpressionNode: Node {
  public:
    virtual ~ExpressionNode();
    virtual int position() = 0;
    virtual int end() = 0;
};

其中一个子类是一个标识符节点,我在其中一个成员上遇到一个非常奇怪的错误:

// Identifier Expression
class IdentNode: ExpressionNode {
  public:
    int namePosition;
    std::string name;

    Node *n; // Error - 'Node' is a private member of 'Node'

    IdentNode();
    ~IdentNode();

    virtual int position();
    virtual int end();
};

为什么我会收到此错误?老实说,我很困惑。

1 个答案:

答案 0 :(得分:5)

(我假设您希望ExpressionNode从Node派生。)默认情况下,继承是private,这意味着派生类无法访问基类成员。使用protected(成员可以通过派生而不是其他范围访问)或public继承(基础中的所有公共成员都可以在任何地方访问)。

class ExpressionNode : public Node {
...
class IdentNode : public ExpressionNode {