2016-04-26 47 views
2

我想创建一个类的指针,如下所示。C++分配一个对象到另一个类

ASTNode* pAssign = new ASTAssignmentNode(); 

然而,pAssign不在于ASTAssignmentNode类中定义的变量。我在这里错过了什么吗?我如何访问ASTAssignmentNode()中定义的变量? ASTAssignmentNode()继承自ASTStatementNode(),其继承自ASTNode()

当写pAssign->variable(在ASTAssignmentNode())出现错误宣布为“P将不包含成员变量定义”

我不是在C经历++。

希望得到任何帮助。

+1

将它分配给指向ASTAssignmentNode的指针。 –

+2

如果你想使用'ASTAssignmentNode',那么你为什么有一个指向基类的指针? –

回答

1

你应该使用ASTAssignmentNode * pAssign代替,如果你这样做是为了一个班级任务,并且他们给你的文件,你不应该修改它,让你使用ASTNode *,请问你的TA,因为我一直处于这种情况应该有可以使用的解决方法,但它无线会不同于不同的作业。

+0

感谢您理解我的情况。我会相应检查。 – Techworld

1

尝试铸造访问属于ASTAssignmentNode类变量

((ASTAssignmentNode* ) pAssign)->variable 

我已经使用被称为常规演员。您也可以使用M.M.提到的静态投射或动态投射。如果您想要详细了解您需要的演员类型,请查看post here

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

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

这是一个例外是虚拟功能。如果虚拟函数存在,则会调用子类实现。

+0

这工作。你能否解释一下,如果我使用它,是否会有影响? – Techworld

+0

这应该是'dynamic_cast'或'static_cast'(最好是前者,除非你真的知道你在做什么) –

+0

编辑包括简要说明 – Striker

0

由于pAssign是一个指向基类的指针,因此您需要将其转换为派生类ASTAssignmentNode。最好用C++ dynamic_cast。

dynamic_cast<ASTAssignmentNode*>(pAssign)->variable 
+0

谢谢你帮了很多! :) – Techworld

+0

如果你正在向某人介绍dynamic_cast,指出它可以返回null – kfsone

相关问题