奇怪的是,我在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();
}
Run Code Online (Sandbox Code Playgroud)
这里我在向量中存储指向A类的指针.当我尝试调用公共方法时,我收到以下编译错误.
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*'
Run Code Online (Sandbox Code Playgroud)
有谁遇到过这样的情况?为什么这被视为编译错误?什么应该是解决这个问题的必要方法?
我用以上编译了以上内容 g++ (GCC) 4.1.2 20080704 (Red Hat 4.1.2-46)
可能只是运营商优先.错误消息看起来像是试图调用迭代器的sayHai方法.所以这样做:
(*iter)->sayHai();
Run Code Online (Sandbox Code Playgroud)