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

Weird c++ variable declaration error, says a class is a private member of itself

本文关键字:成员 c++ 变量 声明 错误      更新时间:2023-10-16

我正在做一个解析器来构建抽象语法树。

我已经为我所有的节点得到了这个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();
};

为什么我得到这个错误?我真的很困惑。

(我假设您打算从Node派生ExpressionNode。)默认情况下,继承是private,这意味着基类成员不能被派生类访问。使用protected(成员可以被派生作用域访问,但不能被其他作用域访问)或public继承(base中的所有公共成员在任何地方都可以访问)。

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