c++ - 成员包含其他继承类的继承类?

标签 c++ class pointers inheritance abstract-syntax-tree

我试图代表C++中的抽象语法树。
我有多个继承基类“TreeNode”的类。
其中一些包含指向其中其他TreeNode继承类的指针。
通过我尝试使用的方法来使其工作,我似乎无法访问子TreeNodes中的成员。难道我做错了什么?有没有更好的方法来实现这一目标?

class TreeNode {};

class UnaryOperation : virtual public TreeNode {
public:
    TreeNodeType Type;
    UnaryOperationType Operation;
    TreeNode* Operand;
    UnaryOperation(UnaryOperationType operation, TreeNode* operand);
};

class BinaryOperation : virtual public TreeNode {
public:
    TreeNodeType Type;
    TreeNode* Left;
    BinaryOperationType Operation;
    TreeNode* Right;
    BinaryOperation(TreeNode* left, BinaryOperationType operation, TreeNode* right);
};
。 。 。
TreeNode* unaryop_node = new UnaryOperation(op_type, operand_node);
return unaryop_node;
...
std::cout << (int)*unaryop->Type << std::endl;
TreeNode类没有成员类型

最佳答案

感谢您的所有答复。
事实证明,我试图以错误的方式解决此问题。我完全删除了TreeNodeType枚举,而是使用虚拟函数遍历了树。

class TreeNode {
public:
    TreeNode();
    virtual void print() = 0;
};

class UnaryOperation : public TreeNode {
public:
    UnaryOperationType Operation;
    TreeNode* Operand;
    UnaryOperation(UnaryOperationType operation, TreeNode* operand);
    void print() override {
        print_unaryop(Operation);
        Operand->print();
    }
};

class BinaryOperation : public TreeNode {
public:
    TreeNode* Left;
    BinaryOperationType Operation;
    TreeNode* Right;
    BinaryOperation(TreeNode* left, BinaryOperationType operation, TreeNode* right);
    void print() override {
        Left->print();
        print_binaryop(Operation);
        Right->print();
    }
};```

`unaryop_node->print();`

关于c++ - 成员包含其他继承类的继承类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62674839/

相关文章:

c - scanf 和指针的问题

c++ - 具有一个和两个模板参数的模板类

c++ - 如何使自定义 C++ 类成为 QML 类型?

c++ - 按位运算n&(n-1)有什么作用?

c++ - `unique_ptr::operator bool()` 是否为已从 move()d move 的 unique_ptr 定义?

class - SugarCRM:在没有 SOAP 的情况下创建带附件的注释?

android - DexClassLoder - 在路径上找不到类

Delphi 字节逆序

java - 双向缓存的内存使用影响

c++ - 可连接的 std::thread 不自动连接的原因是什么?