クラス BaseClass 内に public 関数があります。
virtual void Call(){};
派生クラス Archer の内部には、次の関数があります。
void Call(){ cout << "whatever" << endl; };
私もベクトルを設定しています:
vector<BaseClass> classes;
ここで、BaseClass から派生した 3 つのクラスをプッシュします。問題は、次のようなメソッドを介してベクターにプッシュしているにもかかわらず、BaseClass への参照から Call() を呼び出していることです (私にはおそらく間違っています)。
BaseClass Player::CharChoice(string character)
{
if(character == "Archer") return *new Archer();
else if(character == "Knight") return *new Knight();
else if(character == "Sorcerer") return *new Sorcerer();
else cerr << "CHARACTER NOT DEFINED" << endl;
};
for(int c = 0; c < chars.size(); c++)
{
classes.push_back(CharChoice(chars[c]));
}
代わりに次のような変数を設定すると:
Archer *archer = new Archer();
Call() を呼び出すと、意図したとおりに機能します。私はC++にかなり慣れていないため、これに対する解決策を考え出すことができません。