私はかなり新しいC++ですので、まだここで学んでいます。私が間違った方法でこのことをしているなら、教えてください。しかし、可能であれば、正しい方向に私を向けるようにしてください(チュートリアルへのリンクがあります)。C++は派生オブジェクトをマップ内に格納します
私はstd :: mapで遊んでいて、オブジェクト(アイテム)を格納するために使っています。これは正常に動作します。問題は、派生アイテムをマップ内に格納しようとしていることです。私はそれが働いているが、それは派生したオブジェクトをスライスしているようだ。
アイテムには、属性a、b、およびcがあります。食物は特別な属性dとeを持つアイテムから派生します。私はそれがアイテムのマップに格納されているときにdとeにアクセスすることはできません。コンパイラは言う:
:
「エラー 『クラス項目が』 『D』という名前のメンバーを持っていない」それはSTD ::地図polymorphicalyを使用することが可能であるか、私はブーストのような別のライブラリを使用する必要がありますか?ブーストはやや複雑に思えますが、私はまだ学んでいる間にマップでそれを行う方法があることを望んでいました。私が意味することをより明確にするために、私が演奏しているコードのいくつかを示します。アイテムの
地図をように宣言されています。
Item * item = new Item (a, b, c);
itemmap [vnum] = item;
DerivedItem * deriveditem = new DerivedItem (a, b, c, d, e);
itemmap [vnum] = deriveditem;
これは動作しますが、私は派生アイテムのDとEにアクセスすることはできません。
typedef std::map <int, tItem*> itemMap;
物事はこのようにそれに追加されます。ヘルプみんな
これはすべて、ひどいメモリリークの悪夢になります。代わりにスマートポインタを使用する必要があります。 –
私はそれを学ぶために使用しています、マップ内の項目は、プログラムが閉じられるまで削除されないので、メモリリークがあってはいけません。 – DizzyDuke