L'expression doit avoir un type de pointeur à classe
J'ai un struct "MachineState" et j'ai créé une liste de type "MachineState*". Lorsque j'Essaie de parcourir la liste, je reçois des "
error C2839: invalid return type 'MachineState **' for overloaded 'operator ->
Je suis l'aide de Microsoft Visual Studio 10. J'ai googlé l'erreur et tout ce que je pouvais trouver était: "L' -> opérateur doit retourner une class, struct ou union, ou une référence à un".
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;
};
Je déclare la liste
std::list<MachineState*> zombs;
C'est là que j'essaie de parcourir ma liste et je reçois l'erreur, sur le "il->point1" en disant que l'expression doit avoir un pointeur sur le type de classe.
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);
}
Si quelqu'un peut m'expliquer quel est wron
source d'informationauteur John Kemp
Vous devez vous connecter pour publier un commentaire.
it
est un itérateur pour un pointeur à unMachineState
.Vous avez besoin pour déréférencer l'itérateur et le pointeur.
Edit:
Déréférencement signifie obtenir la chose que c'est en se référant à.
Déréférencement est fait avec le
*
ou->
opérateur.Si
it
ont été unMachineState
vous pouvez utiliserit.point1
Si
it
ont été un pointeur à unMachineState
vous pouvez utiliserit->point1
ou(*it).point1
Si
it
ont été un itérateur à unMachineState
vous pouvez également utiliserit->point1
ou(*it).point1
Depuis
it
est un itérateur vers un pointeur à unMachineState
vous devez utiliser(*it)->point1
ou(**it).point1