无法调用存储在容器中的指针上的公共方法
Not able to call a public method on pointer stored in a container
奇怪的是,我在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)
可能只是操作符优先级。错误消息看起来像是试图调用迭代器的sayHai方法。所以这样做:
(*iter)->sayHai();
此错误是由于操作符*的优先级低于操作符->。
*iter->sayHai();
将被视为*(iter->sayHai());
,也就是说,你所写的等同于*( (*iter).sayHi() ) // iter->sayHi equivalent to (*iter).sayHi()
由于iter类型中没有名为sayHi的成员,因此编译失败。
相反,将有问题的行替换为:(*iter)->sayHai();
这将首先解引用iter,然后按预期在结果指针引用的对象上调用sayHi。
相关文章:
- 在C#中处理C++指针而不使用unsafe的最佳方法
- C++优先级队列,按对象的唯一指针的特定方法升序排列
- 对于C++中使用智能指针的指针算术限制,有没有一种变通方法
- 有没有一种"cleaner"的方法可以在指向基的指针向量中找到派生类的第一个实例?
- 在c++中为我自己的基于指针的数组分配内存的正确方法
- 将成员函数指针作为参数传递给模板方法
- 通过函数指针定义类范围之外的方法
- 模板方法访问正向声明的类仅在没有此指针的情况下无法编译
- 如何访问由共享指针保存的类方法?
- 初始化指向类实例的智能指针并访问其方法
- 我无法使用C++指针指向类方法返回的 std::vector
- 如何在工厂方法中返回指向基于基础操作系统的派生类的有效指针
- 有没有将变量名称转换为双指针的简短方法?
- 在自定义 std::vector-like 容器中处理指针和非指针模板类型的最佳方法是什么?
- 如何在成为指向基类的指针后保留对子类方法的使用?
- 从纯虚拟类 (A) 派生的指针无法访问来自纯类 (B) 的重载方法
- 类指针方法崩溃程序
- 证明两指针方法有效(对和)
- Qt 删除指针方法
- 我如何将一些类的指针方法转换为指针函数