これはおそらくばかげたエラーですが、次のエラーが表示されます。
error: request for member ‘speak’ in ‘it.__gnu_cxx::__normal_iterator<_Iterator, _Container>::operator* [with _Iterator = Bird* const*, _Container = std::vector<Bird*>, __gnu_cxx::__normal_iterator<_Iterator, _Container>::reference = Bird* const&]()’, which is of non-class type ‘Bird* const’
エラーの原因となっているコードは次のとおりです。
void Aviary::speakAll(std::ostream &os) const{
for(std::vector<Bird*>::const_iterator it = birds.begin(); it != birds.end(); it++){
it->speak(os);
}
}
Bird ポインターを格納するために使用している構造は次のとおりです。
typedef std::vector<Bird*> Birds;
void Aviary::addBird(Bird *bird){
if(!bird) throw std::logic_error("");
birds.push_back(bird);
}
問題は、ポインターからオブジェクトのメンバー関数を呼び出す方法です。