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

c – 表达式必须具有指向类的类型,第1张

概述我有一个结构“MachineState”,我创建了一个类型“MachineState *”的列表.当我尝试迭代列表我继续得到“ error C2839: invalid return type 'MachineState **' for overloaded 'operator -> 我正在使用Microsoft Visual Studio 10.我googled的错误,我可以找到的是“ – >运 我有一个结构“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 – 表达式必须具有指向类的类型所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1233637.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存