微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

原文地址:https://www.jb51.cc/c/115725.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐