2016-04-26 5 views
2

私はクラスへのポインタを次のように作成しようとしています。C++他のクラスにオブジェクトを割り当てる

ASTNode* pAssign = new ASTAssignmentNode(); 

しかし、pAssignはクラスASTAssignmentNodeで定義された変数から構成されていません。私はここで何かを逃していますか? ASTAssignmentNode()に定義されている変数にアクセスするにはどうすればよいですか? ASTAssignmentNode()は、ASTNode()を継承するASTStatementNode()から継承します。

++私はCで経験していないです

「をpAssignは、メンバ変数の定義が含まれていません」。

は、任意のヘルプをお願い申し上げエラーが発生しASTAssignmentNode())で宣言されpAssign->variableを(執筆。

+1

「ASTAssignmentNode」へのポインタに割り当てます。 –

+2

'ASTAssignmentNode'を使いたいのであれば、なぜ基本クラスへのポインタを持っていますか? –

答えて

1

あなたはASTAssignmentNode * pAssignを代わりに使用するべきです。クラス割り当てのためにこれを行っていて、あなたがASTNode *を利用するように修正したくないファイルを与えるならば、私はその状況にいたので、あなたが使用できる回避策があるはずですが、それはwiです異なる課題とは異なります。

+0

私の状況を完全に理解してくれてありがとう。私はそれに応じてチェックします。 – Techworld

1

てみ鋳造はASTAssignmentNodeクラスに属する変数にアクセスするための定期的なキャストと呼ばれている私は何を使用している

((ASTAssignmentNode* ) pAssign)->variable 

。静的なキャストを使うこともできますし、M.M.あなたが必要とするキャストのタイプの詳細な内訳を知りたい場合は、post hereをチェックしてください。

特定のASTAssignmentNodeがASTNodeの子である限り、何の意味もないはずです。

ASTNodeにASTAssignmentNodeをキャストすると、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

関連する問題