對,我對C++相當陌生,所以我仍然在這裏學習。如果我以錯誤的方式解決這個問題,請告訴我,但如果可能,請嘗試指向正確的方向(通過鏈接指導教程)。在地圖中存儲派生對象的C++
我一直在玩std :: map並用它來存儲對象(item)。這工作正常。問題是試圖在地圖中存儲派生項目。我已經掌握了它的工作原理,但它似乎在分割派生的對象。
所以說項目具有屬性a,b和c。食物來自具有額外屬性d和e的物品。存儲在項目地圖中時,我無法訪問d和e。編譯器說:
「錯誤:‘類項目’沒有名爲‘d’成員」
是否可以使用std ::地圖polymorphicaly或者我需要使用另一個庫像升壓? Boost看起來相當複雜,我希望在我還在學習的時候有一種方法可以用地圖來做。下面是我正在使用的一些代碼,以更清楚地表達我的意思。
地圖項目被聲明爲這樣:
typedef std::map <int, tItem*> itemMap;
事情添加到這樣的:
Item * item = new Item (a, b, c);
itemmap [vnum] = item;
DerivedItem * deriveditem = new DerivedItem (a, b, c, d, e);
itemmap [vnum] = deriveditem;
這工作,但我不能訪問d和e衍生項目。
感謝您的幫助球員
這一切都將是一場可怕的內存泄漏噩夢。您應該使用智能指針。 – 2011-12-27 12:18:52
我正在使用它來學習,在程序關閉之前,地圖中的項目不會被刪除,所以不應該有內存泄漏。 – DizzyDuke 2011-12-27 16:35:43