2017-05-12 197 views
-4

試圖解釋這是最好的方式。我目前編碼解析器,它接受字面,其中文字可能是一個內部/實際/字符串等...如何從父類訪問子類

http://imgur.com/a/YQwlf

上面的鏈接顯示的代碼的部分與調試執行,隨後通過使用當前變量。正如你所看到的'字面'不包含任何東西。它不應該在Int Literal類中顯示值嗎?我還附加了Literal和Int Literal類文件。

+0

什麼是「Java」標籤? –

+0

_「不應該顯示Int Literal類中的值嗎?」_不明白爲什麼。這不在範圍之內;只有一個指針。 –

回答

0

new ASTNodeInt(currToken)給你一個指向堆上的ASTNodeInt的指針,而不是'實際的'ASTNodeInt。通過執行literal->intlit來尊重指針,您可以從中獲得一個值。你的調試器看起來是正確的,它說literal是一個ASTNodeLiteral *(一個指針),它的值是一個內存地址。

此外,您的代碼似乎泄漏了內存 - 您將創建一個新的ASTNodeInt,然後創建另一個新的並返回,而不會在您創建的原始內容上調用delete

+0

http://imgur.com/a/ZIc3b 我無法使用'literal-> intlit'來檢索一個值。這是因爲指針指向ASTLiteral。無論如何它會自動指向ASTNodeInt以檢索值'intlit'? –

+0

也許'(static_cast (literal)) - > intlit'?對不起,我在C++上很生鏽。但據我所知,你得到一個父類型的指針(NodeFactor *),但你想把它當作一個指向子類型的指針(NodeInt *)。所以你需要施放。 –

+0

非常感謝,這工作!有沒有可能我可以自動將其轉換爲子實例?這是因爲我不能簡單地告訴將文字轉換爲什麼,因爲它可能是多個子類中的一個。 –