c – 表达式必须具有指向类的类型

前端之家收集整理的这篇文章主要介绍了c – 表达式必须具有指向类的类型前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_403_0@
我有一个结构“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

猜你在找的C&C++相关文章