継承されたクラスのポインタのマップを作成できるかどうか疑問に思っています。ここで私は何をしようとしているの例です:私が得る継承クラスのstd :: mapを作成できますか?
#include <string>
#include <map>
using namespace std;
class BaseClass
{
string s;
};
class Derived1 : public BaseClass
{
int i;
};
class Derived2 : public Derived1
{
float f;
};
// Here's what I was trying, but isn't working
template<class myClass>
map<string, myClass>m;
int main()
{
// Add BaseClasses, Derived1's, and/or Derived2's to m here
return 0;
}
エラーは以下のとおりです。
main.cpp(23): error C2133: 'm' : unknown size main.cpp(23): error C2998: 'std::map<std::string,myClass>m' : cannot be a template definition
それが可能だ場合、私はこのエラーを取得していますが、私は思ったんだけど、なぜ私が手異なるレベルの継承クラスを保持できるマップを作成しますか?そうでない場合は、さまざまなクラスタイプを保持できる管理システムを作成することは可能ですか?あるいは、私は別のマップ/ベクトル/配列/等を作らなければなりません。クラスの種類ごとに?
「BaseClass *」を保存しているだけではない理由がありましたか? –
'BaseClass *'のマップを持ち、その機能を維持しながら 'Derived1 *'と 'Derived2 *'を追加することはできますか?以前のようなものを試したことは覚えていますが、 'BaseClass *'のマップは、元のものとは無関係に、私がそれを 'BaseClass *'に変換しているように見えます。 – JJandDjango
派生クラスへのポインタは、暗黙的にベースクラスへのポインタに変換できます(そうです)が、ポインタがインスタンスを指している派生型を把握する方法が必要です。次に、ベースをキャストしなければなりません派生関数を使用するための派生ポインタへのポインタ。 –