我有一个结构“MachineState”,我创建了一个类型为“MachineState *”的列表。当我试图遍历列表时我会继续“
error C2839: invalid return type 'MachineState **' for overloaded 'operator ->
我正在使用Microsoft Visual Studio 10.我用Google搜索了错误,我发现的所有内容都是“ - >运算符必须返回一个类,结构或联合,或者引用一个。”
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-&gt; 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, 0));
m_GraphicsImage.FillPolygon(&brush, pPoints,3);
}
如果有人能解释我的是什么wron
答案 0 :(得分:22)
it
是指针的迭代器 到MachineState
。
您需要取消引用迭代器然后指针。
Point points[3] = {(*it)->point1, (*it)->point2, (*it)->point3};
修改强>
解除引用表示获取它所指的。
取消引用是使用*
或->
运算符完成的。
如果it
是MachineState
,您可以使用it.point1
如果it
是MachineState
的指针,您可以使用it->point1
或(*it).point1
如果it
是迭代器到MachineState
,您还可以使用it->point1
或(*it).point1
由于it
是指向<{1>}的指针的迭代器,因此您必须使用MachineState
或(*it)->point1