Выражение должно иметь тип указателя на класс
У меня есть структура "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, 0));
m_GraphicsImage.FillPolygon(&brush, pPoints,3);
}
Если кто-нибудь может объяснить мне, что wron
Ответы
Ответ 1
it
является итератором для указателя на MachineState
.
Вам нужно разыменовать итератор и указатель.
Point points[3] = {(*it)->point1, (*it)->point2, (*it)->point3};
Edit:
Выделение означает получение того, на что оно ссылается.
Выделение происходит с помощью оператора *
или ->
.
Если it
были MachineState
, вы могли бы использовать it.point1
Если it
был указателем на MachineState
, вы могли бы использовать it->point1
или (*it).point1
Если it
был итератором до MachineState
, вы также можете использовать it->point1
или (*it).point1
Так как it
является итератором с указателем на MachineState
, вы должны использовать (*it)->point1
или (**it).point1