我有一个结构“MachineState”,我创建了一个类型“MachineState *”的列表.当我尝试迭代列表我继续得到“
error C2839: invalid return type 'MachineState **' for overloaded 'operator ->
我正在使用Microsoft Visual Studio 10.我googled的错误,我可以找到的是“ – >运算符必须返回一个类,结构或联合,或一个引用.
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)); m_GraphicsImage.FillPolygon(&brush,pPoints,3); }
如果有人可以解释我是什么
解决方法
它是指向MachineState的指针的迭代器.
您需要取消引用迭代器和指针.
Point points[3] = {(*it)->point1,(*it)->point2,(*it)->point3};
编辑:
取消引用意味着得到它所指的东西.
使用*或 – >操作符.
如果是MachineState,可以使用它.point1
如果它是一个指向MachineState的指针,可以使用它 – > point1或(* it).point1
如果它是MachineState的迭代器,您还可以使用它 – > point1或(* it).point1
由于它是指向MachineState的指针的迭代器,因此您必须使用(* it) – > point1或(** it).point1