そうです、私は c++ にかなり慣れていないので、まだここで学んでいます。これについて間違った方法で行っている場合は教えてください。ただし、可能であれば正しい方向に向けるようにしてください (チュートリアルへのリンクを含む HPAPS など)。
私は std::map をいじっていて、それを使ってオブジェクト (アイテム) を保存しました。これはうまくいきます。問題は、派生アイテムをマップ内に格納しようとすることです。私はそれを機能させましたが、派生オブジェクトをスライスしているようです。
たとえば、item に属性 a、b、c があるとします。food は、追加の属性 d および e を持つ item から派生します。アイテムのマップに格納されている場合、d と e にアクセスできません。コンパイラは次のように述べています。
「エラー: 'class item' には 'd' という名前のメンバーがありません」
std::map を多態的に使用することは可能ですか、それともブーストのような別のライブラリを使用する必要がありますか? ブーストはかなり複雑に思えます。私がまだ学習している間にマップでそれを行う方法があることを望んでいました。これは、私が何を意味するのかを明確にするために、私が遊んでいるコードの一部です。
アイテムのマップは次のように宣言されます。
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 にアクセスできません。
助けてくれてありがとう