C++ C++;将对象分配给另一个类

C++ C++;将对象分配给另一个类,c++,inheritance,C++,Inheritance,我试图创建一个指向类的指针,如下所示 ASTNode* pAssign = new ASTAssignmentNode(); 但是,pAssign不包含类asAssignmentNode中定义的变量。我是不是错过了什么?如何访问asAssignmentNode()中定义的变量ASTAssignmentNode()继承自ASTStatementNode(),后者继承自ASTNode() 写入pAssign->variable(在asAssignmentNode()中声明)时出现错误“pAssig

我试图创建一个指向类的指针,如下所示

ASTNode* pAssign = new ASTAssignmentNode();
但是,
pAssign
不包含类
asAssignmentNode
中定义的变量。我是不是错过了什么?如何访问
asAssignmentNode()
中定义的变量
ASTAssignmentNode()
继承自
ASTStatementNode()
,后者继承自
ASTNode()

写入
pAssign->variable
(在
asAssignmentNode()中声明)
时出现错误“pAssign不包含成员变量的定义”

我在C++方面没有经验。p>
非常感谢您的帮助。

您应该改用AssignmentNode*pAssign。如果你是为了一个类赋值而这样做的,而他们给了你一些你不应该修改的文件,让你利用ASTNode*,询问您的助教,因为我遇到过这种情况,您应该可以使用一些变通方法,但不同的作业会有所不同。

尝试强制转换以访问属于AsAssignmentNode类的变量

((ASTAssignmentNode* ) pAssign)->variable
我所用的是所谓的常规演员阵容。您也可以使用M.M.提到的静态强制转换或动态强制转换。如果您想详细了解您需要哪种类型的强制转换,请查看

只要确定ASTAssignmentNode是ASTNode的子级,就不会有任何影响

当您将ASTAssignmentNode强制转换为ASTNode时,它将只包含ASTNode的类定义,而对ASTAssignmentNode一无所知。这就是为什么你需要把它扔回去


虚拟函数是一个例外。虚拟函数调用子类实现(如果存在)。

由于pAssign是指向基类的指针,因此需要将其强制转换为派生类AsAssignmentNode。最好用C++动态映射.

dynamic_cast<ASTAssignmentNode*>(pAssign)->variable
dynamic\u cast(pAssign)->变量

将其分配给指向
ASTAssignmentNode
的指针。如果您想使用
ASTAssignmentNode
,那么为什么会有指向基类的指针?感谢您完全理解我的情况。我会进行相应的检查。这起作用了。请您解释一下,如果我使用它,是否会有影响?这应该是
dynamic\u cast
static\u cast
(最好是前者,除非您真的知道自己在做什么)编辑后包含简短的解释谢谢,这很有帮助!)如果您向某人引入动态_cast,请指出它可能返回null