我有一个结构“MachineState”,我创建了一个类型“MachineState *”的列表.当我尝试迭代列表我继续得到“
error C2839: invalid return type 'MachineState **' for overloaded 'operator ->@H_404_4@我正在使用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; };@H_404_4@我声明列表为
std::list<MachineState*> zombs;@H_404_4@这里是我尝试遍历我的列表,我继续收到错误,在“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); }@H_404_4@如果有人可以解释我是什么
解决方法
它是指向MachineState的指针的迭代器.
@H_404_4@您需要取消引用迭代器和指针.
Point points[3] = {(*it)->point1,(*it)->point2,(*it)->point3};@H_404_4@编辑: @H_404_4@取消引用意味着得到它所指的东西. @H_404_4@使用*或 – >操作符. @H_404_4@如果是MachineState,可以使用它.point1 @H_404_4@如果它是一个指向MachineState的指针,可以使用它 – > point1或(* it).point1 @H_404_4@如果它是MachineState的迭代器,您还可以使用它 – > point1或(* it).point1 @H_404_4@由于它是指向MachineState的指针的迭代器,因此您必须使用(* it) – > point1或(** it).point1