-2
私は、このクラス構造を持っている:C++私のプロジェクトのためにベクトル基底クラスと継承
class Base
{
enum class type
{
Derived1,
Derived2
}
int getType() {return type;};
type type;
//general methods & attributes
}
class Derived1 : public Base
{
//specific methods & attributes
void uniqueSpecificMethodOfDerived1();
}
class Derived2 : public Base
{
//specific methods & attributes
void uniqueSpecificMethodOfDerived2();
}
class Core
{
vector<unique_ptr<Base>> tab;
void iterate();
}
void Core::iterate()
{
tab.emplace_back(new Derived1());
tab.emplace_back(new Derived2());
vector<unique_ptr<Base>>::iterator it;
for (it = tab.begin(); it != tab.end(); ++it)
{
if ((*it)->getType())
(*it)->uniqueSpecificMethodOfDerived1(); //unknow function Can't resolve 'uniqueSpecificMethodOfDerived1()'
if ((*it)->getType())
(*it)->uniqueSpecificMethodOfDerived2(); //unknow function Can't resolve 'uniqueSpecificMethodOfDerived1()'
}
}
私の問題は、私は、このベクトル内の派生クラスの特定のメソッドを達することができないです。そして、私はこの機能が完全に異なっており、他の派生クラスでは必要ではないため、多態性を使用したくありません。
どうすればいいですか?
これらの機能が全く異なる場合、なぜこれらの異なるオブジェクトを同じベクターに埋め込みましたか? – Quentin
あなたは、少なくとも 'dynamic_cast'を使ってポインタを正しい型にダウンキャストする必要があります。' Base'クラスは子供のメソッドについては何も知らないことが明らかです(仮想ではないので)これらの派生クラスは、メインクラスが提供する多くのメソッドと属性を共有しているため、実際の継承を継承しています - 継承の目的を捨てるようなやり方もあります。 – UnholySheep
実際、彼らは同じタイプのオブジェクトです。エンティティは私の基底クラス、Enemy/Player/Shotはエンティティ –