0

我有一個基類指針的映射,我需要將類函數應用於映射的數據。如何在地圖上的基類指針上應用函數?

我正在處理用戶將輸入的形狀,然後有機會操作它們(平移,旋轉...)。我有功能女巫的工作,操縱形狀和形狀存儲在地圖中。

我正在努力如何訪問和操作映射的形狀。

我有以下代碼;

polygon * T; 
map<string, polygon*> shape_map; 
new_shape = Trans + user_input; // adds Tranaslated to the key 

cout << "ID " << new_shape << " = " << endl; // ouput the key witch also id's the shape 
T = shape_map[user_input]->translate(matrix(Xtrans, Ytrans)); 
T->printshape(); 

當我運行我的代碼的程序停止之前它應該打印的形狀,當我調試它強調了我的翻譯功能的線,但我相信我的翻譯功能是罰款,我已經測試它之前。

我認爲問題在於我如何調用函數,但我不確定。

任何幫助將是偉大的!

+1

我看不到你在地圖上放置了new_shape的位置。我假設你期望shape_map [user_input]返回new_shape。 –

+0

是的。我想避免將新的已轉換形狀添加到shape_map,因爲我想向用戶顯示它,然後詢問他們是否想要存儲該形狀。 – Peter

+0

translate函數返回它所作用的類型(形狀的類型是來自抽象基類的多邊形的派生類)。 – Peter

回答

0

如果形狀詞典中沒有存儲在user_input中的鍵下面的多邊形,shape [user_input]將返回null。假設translate不是一個虛函數,當翻譯訪問'this'時程序會崩潰。如果它是虛擬的,它會在嘗試調用翻譯時崩潰。

當找不到密鑰時,地圖會構造一個new <T>(),但在你的情況下,T只是一個指針而the default constructor for a pointer sets it to null

相關問題