对,我对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