ここで継承がどのように機能するかを誤解しているかもしれませんが、ここに私の問題があります。
クラスOptionと、それから派生したクラスRoomOptionがあります。shared_ptrsのベクトルを保持する別のクラスRoomがあります。主に、そのベクトルにRoomOptionを追加します。次に、typeid()を使用してタイプをチェックすると、オプションが表示されます。私が読んだことから、typeidは派生型を返すことになっており、shared_ptrsはスライスを引き起こさないので、何が間違っているのかわかりません。
コードは次のとおりです。
Room.h:
vector<shared_ptr<Option> > options;
void addOption(shared_ptr<Option>);
shared_ptr<Option> getOption(int);
Room.cpp:
void Room::addOption(shared_ptr<Option> option){
options.push_back(option);
}
shared_ptr<Option> Room::getOption(int i){
return options[i];
}
主要:
shared_ptr<Room> outside(new Room(0, "", ""));
outside->addOption(shared_ptr<RoomOption>(new RoomOption(0, "Go inside", hallway)));
cout<<typeid(player->getRoom()->getOption(0)).name().get()<<endl;
//This line prints "class std::tr1::shared_ptr<class Option>
オプションを追加または取得するときに、リターン/引数のタイプが原因でRoomOptionがオプションとしてキャストされることがあります。その場合、複数のタイプのベクトルをどのように格納する必要がありますか?それとも私はこれをすべて間違っていますか?= \