title: Expression must have pointer-to-class-type
body: <p>I have a struct "MachineState" and i created a list of type "MachineState*". When i Try to iterate through the list i Keep getting "</p>
  
  <pre><code>error C2839: invalid return type 'MachineState **' for overloaded 'operator -&gt;
  </code></pre>
  
  <p>I'm using Microsoft Visual Studio 10. I googled the error and all i could find out was "The -> operator must return a class, struct, or union, or a reference to one." </p>
  
  <pre><code>Struct MachineState
  {
  
     template &lt;typename MachineTraits&gt;
     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;
  
  };
  </code></pre>
  
  <p>I declare the list as</p>
  
  <pre><code> std::list&lt;MachineState*&gt; zombs;
  </code></pre>
  
  <p>Here is where I try to iterate through my list and i keep getting the error, on the "it->point1" saying  that the expression must have a pointer to class type.</p>
  
  <pre><code>    for(std::list&lt;MachineState*&gt;::iterator it = zombs.begin(); it != zombs.end(); it++)
       {
          Point points[3] = {it-&gt;point1, it-&gt;point2, it-&gt;point3};
          Point* pPoints = points;
          SolidBrush brush(Color(255, 255, 0, 0));
          m_GraphicsImage.FillPolygon(&amp;brush, pPoints,3);
       }
  </code></pre>
  
  <p>If anyone can explain me what's wron</p>