c++ - 无法对存储在容器中的指针调用公共(public)方法

标签 c++ stl vector

奇怪的是,我在 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/

相关文章:

c++ - 读出一个大的txt文件

.NET:继承修改基类(C++转换)

c++ - MFC CArray 中的 std::vector - 将元素添加到 CArray 后出现 "iterator not dereferencable"错误

opencv - opencv Mat从Vector的模板初始化

c++ - 通过仅循环一次组合 C++ 标准算法

c++ - 对于可 move 类型,删除 std::vector 中间的元素仍然很昂贵吗?

C++ 内存泄漏与 STL vector

c++ - 将字符串 vector 转换为 *char

c++ - 来自同一祖 parent 的多重继承 - 合并实现?

c++ - 在 OpenGL 上绘制点的意外 gluLookAt 行为