奇怪的是,我在 C++ 中遇到以下代码的编译错误。
class A
{
public:
void sayHai()
{
cout << "\n Hai";
}
};
int main(int argc, char** argv)
{
vector< A* > vectorA;
vectorA.push_back(new A());
for (vector< A* >::iterator iter = vectorA.begin();
iter != vectorA.end();
++iter)
*iter->sayHai();
}
这里我将指向 A 类的指针存储在一个 vector 中。当我尝试调用公共(public)方法时,出现以下编译错误。
VectorExample.cpp: In function 'int main(int, char**)':
VectorExample.cpp:30: error: request for member 'sayHai' in
'* iter.__gnu_cxx::__normal_iterator<_Iterator, _Container>::operator->
[with _Iterator = A**, _Container = std::vector<A*,
std::allocator<A*> >]()', which is of non-class type 'A*'
有人遇到过这种情况吗?为什么这被视为编译错误?解决这个问题的必要方法是什么?
我使用 g++ (GCC) 4.1.2 20080704 (Red Hat 4.1.2-46) 编译了上面的代码
最佳答案
可能只是运算符优先级。错误消息看起来像是在尝试调用迭代器的 sayHai 方法。所以改为这样做:
(*iter)->sayHai();
关于c++ - 无法对存储在容器中的指针调用公共(public)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7660035/