作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这可能是一个愚蠢的错误,但我收到以下错误:
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/
我正在尝试在 Linux (Redhat) 中运行旧的 C++ 代码。我正在使用 gcc 版本 4.1.2。这是我遇到错误的代码示例: template TP *GCVVect
这可能是一个愚蠢的错误,但我收到以下错误: error: request for member ‘speak’ in ‘it.__gnu_cxx::__normal_iterator::ope
int webServerPort = -1; void configure(std::string responseFile, callback_function call_back, std
我是一名优秀的程序员,十分优秀!