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

我有一个结构“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&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...