gpt4 book ai didi

c++ - 错误:在‘it.__gnu_cxx::__normal_iterator<_Iterator, _Container>::operator* 中请求成员 ‘speak’

转载 作者:行者123 更新时间:2023-11-28 00:40:26 24 4
gpt4 key购买 nike

这可能是一个愚蠢的错误,但我收到以下错误:

    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);

问题是如何从指针调用对象的成员函数?

最佳答案

您正在迭代指针,而不是值。要引用迭代器指向的值,请使用 ->*,您的值是一个指针,因此您需要第二次取消引用:

(*it)->speak(os);
// or
(**it).speak(os);

这里,*it的意思是give me the pointer,那么第二个*或者->的意思取消引用指针

关于c++ - 错误:在‘it.__gnu_cxx::__normal_iterator<_Iterator, _Container>::operator* 中请求成员 ‘speak’,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19165218/

24 4 0
文章推荐: 内存位置的 C++ 范围错误?
文章推荐: javascript - 如何使用 d3.js 自动更新行转换
文章推荐: javascript - HTML - 为