2017-05-12 17 views
-4

これは可能な限り最良の方法です。私は現在、上記のリンクは続き、コードの一部は、デバッグで実行されて示しています...親クラスから子クラスにアクセスする方法

http://imgur.com/a/YQwlf

をリテラルのInt /実/文字列などの可能性がリテラルを受け入れパーサを、コーディングしています現在の変数が使用されます。あなたが見ることができるように、 '文字通り'は何も保持していません。 Int Literalクラスの値を表示すべきではありませんか?私はLiteralとInt Literalクラスファイルも添付しました。

+0

「Java」タグとは何ですか? –

+0

_ "Int Literalクラスの値を表示すべきではありませんか?"それは範囲にない。それに対するポインタだけです。 –

答えて

0

new ASTNodeInt(currToken)は、ASTNodeIntではなく、実際のヒープ上のASTNodeIntへのポインタを提供します。 literal->intlitを実行してポインタを参照することで、値を取得できます。デバッガは正しく見えます。literalASTNodeLiteral *(ポインタ)で、その値はメモリアドレスです。

を作成して別の新しいコードを作成し、作成した元のコードにdeleteを呼び出すことなくコードをリークさせることもできます。

+0

http://imgur.com/a/ZIc3b 値を取得するのに 'literal-> intlit'を使用できません。これは、ポインタがASTLiteralを指しているためです。とにかく 'intlit'という値を取得するために自動的にASTNodeIntを指すようにしていますか? –

+0

おそらく '(static_cast (literal)) - > intlit'ですか?申し訳ありませんが、私はC++で非常に錆びています。しかし、私が理解しているように、あなたは親タイプ(NodeFactor *)のポインタを取得していますが、それを子タイプ(NodeInt *)へのポインタとして扱いたいとします。だからあなたはキャストする必要があります。 –

+0

ありがとう、これはうまくいった!子インスタンスに自動的にキャストする方法がありますか?これは、リテラルを複数の子クラスの1つにすることができるため、リテラルをどのようにキャストするべきかを簡単に指示できないためです。 –

関連する問題