无法对存储在容器中的指针调用公共方法 很奇怪,我在C++中对下面的代码有编译错误。p> 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(); }

无法对存储在容器中的指针调用公共方法 很奇怪,我在C++中对下面的代码有编译错误。p> 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(); },c++,stl,vector,C++,Stl,Vector,在这里,我将指向类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->

在这里,我将指向类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编译了上面的代码,可能只是运算符优先级。错误消息看起来像是试图调用迭代器的sayHai方法。因此,请改为:

(*iter)->sayHai();

可能只是运算符优先级。错误消息看起来像是试图调用迭代器的sayHai方法。因此,请改为:

(*iter)->sayHai();

此错误是由于运算符*的优先级低于运算符->

线路 *iter->sayHai

将被视为*iter->sayHai;换句话说,你写的东西相当于 **iter.sayHi//iter->sayHi相当于*iter.sayHi 由于iter类型中没有名为sayHi的成员,因此无法编译

相反,将有问题的行替换为: *iter->sayHai;
这将首先取消对iter的引用,然后按预期对结果指针引用的对象调用sayHi。

此错误是由于运算符*的优先级低于运算符->

线路 *iter->sayHai

将被视为*iter->sayHai;换句话说,你写的东西相当于 **iter.sayHi//iter->sayHi相当于*iter.sayHi 由于iter类型中没有名为sayHi的成员,因此无法编译

相反,将有问题的行替换为: *iter->sayHai;
这将首先解除对iter的引用,然后按预期对结果指针引用的对象调用sayHi。

出现“Hai”一词足以让我不想回答问题!:“海”这个词的出现足以让我不想回答任何问题