同じ基本クラスから派生したオブジェクトへのポインターのベクトルがあります。問題は、関数 (メソッドではなく) を呼び出すときに、元のオブジェクトの型が忘れられることです。
class Cat{
//base class
public:
virtual void growl() = 0;
};
class HouseCat : public Cat{
//derived class
public:
void growl(){};
};
class AlleyCat : public Cat{
//derived class
public:
void growl(){};
};
void function(HouseCat& a){};
void function(AlleyCat& a){};
int main(){
vector<Cat*> cats;
cats.push_back(new HouseCat);
cats.push_back(new AlleyCat);
function(*(cats[0])); //error: cannot convert parameter 1 from 'Cat' to 'HouseCat &'
(cats[0])->growl(); //this works though
}
回避策はありますか?