Странно, я получаю ошибку компиляции в 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 в векторе. И когда я пытаюсь вызвать публичный метод, я получаю следующую ошибку компиляции.
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)