2016-04-26 66 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

相關問題