表达式必须具有指针到类的类型
Expression must have pointer-to-class-type
我有一个结构体"MachineState",我创建了一个类型为"MachineState*"的列表。当我尝试遍历列表时,我一直得到"
"error C2839: invalid return type 'MachineState **' for overloaded 'operator ->
我用的是Microsoft Visual Studio 10。我在谷歌上搜索了这个错误,我所能找到的是"->操作符必须返回一个类、结构或联合,或者对一个的引用。"
Struct MachineState
{
template <typename MachineTraits>
friend class Machine;
enum Facing { UP, RIGHT, DOWN, LEFT};
MachineState()
: m_ProgramCounter(1)
, m_ActionsTaken(0)
, m_Facing(UP)
, m_Test(false)
, m_Memory(nullptr)
,x(0)
,y(0)
,point1(25, 10)
,point2(10, 40)
,point3(40, 40)
{ }
int m_ProgramCounter;
int m_ActionsTaken;
Facing m_Facing;
bool m_Test;
int x;
int y;
Point point1;
Point point2;
Point point3;
};
我声明列表为
std::list<MachineState*> zombs;
这里是我尝试迭代我的列表,我不断得到错误,在"it->point1"上说表达式必须有一个指向类类型的指针。
for(std::list<MachineState*>::iterator it = zombs.begin(); it != zombs.end(); it++)
{
Point points[3] = {it->point1, it->point2, it->point3};
Point* pPoints = points;
SolidBrush brush(Color(255, 255, 0, 0));
m_GraphicsImage.FillPolygon(&brush, pPoints,3);
}
如果有人能告诉我是怎么回事
it
是指向指针的迭代器指向MachineState
首先对迭代器解引用,然后对指针解引用。
Point points[3] = {(*it)->point1, (*it)->point2, (*it)->point3};
编辑:解引用意味着获得它所引用的的内容。
用*
或->
操作符解引用。
如果it
是MachineState
,你可以使用it.point1
如果it
是指向MachineState
的指针,则可以使用it->point1
或(*it).point1
如果it
是指向MachineState
的迭代器,也可以使用it->point1
或(*it).point1
由于it
是指向指向MachineState
的指针的迭代器,因此必须使用(*it)->point1
或(**it).point1
相关文章:
- 非类型指针和引用模板参数,以及在编译时如何/为什么解析它们.c++
- 如何访问在 c++ 中在类内声明的结构类型指针变量?
- (C )找到基本类型指针的儿童类型
- 表达式必须具有指向对象的指针类型(指针向量)
- 将子项复制构造到父类型指针中
- C 返回类型指针声明
- 调用虚拟函数而不通过类类型指针创建任何对象
- C++ 如何使用类类型指针制作向量
- 为什么基类型指针不能获取派生类对象的地址值?
- 如何在 C++ 中获取映射类型指针,映射
- 如何检查该类型的类型指针是正确对齐的
- 正在转换为短类型指针
- 指向任意类方法的模板非类型指针
- 如何通过强制转换类型指针将字符数组转换为uint16_t
- 指向shared_ptr的不透明类型 C 指针
- C++:从值类型指针强制转换为包含迭代器
- C/C++:访问给定类型指针的位置与访问另一类型指针的相同位置不同
- 比较类型指针
- 数据类型指针使用*(Datatype *)
- 如何打印c++中char类型指针的所有值