我试图代表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/