2013-04-24 21 views
10

olmalıdır. "MachineState" yapısına sahibim ve "MachineState *" türünde bir liste oluşturdum. i listesi arasında yineleme çalıştığımda "Ben hata googled ben Microsoft Visual Studio 10. kullanıyorumİfadenin, işaretçi-sınıf türü

error C2839: invalid return type 'MachineState **' for overloaded 'operator -> 

ve ben bulabildiğim tüm idi" alma tutun -> operatörü, bir sınıf, yapı dönmek zorundadır veya birleşme ya da birine bir başvuru. "Ben listesi üzerinden yineleme deneyin nerede

İşte
std::list<MachineState*> zombs; 

olduğu gibi

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; 

}; 

O listeyi beyan ve ben üzerine, hata almaya devam" it-> point1 o ifadesinin sınıf tipine bir işaretçi olması gerekir.

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); 
    } 

kimse varmi

cevap

19

it bana ne açıklayabilir Bir MachineState bir pointer için Yineleyicinin.

İteratör ve işaretçisini işaretçiye almanız gerekir.

Point points[3] = {(*it)->point1, (*it)->point2, (*it)->point3}; 

Düzenleme: başvurusu kaldırıldığında

o bahsediyordur o şeyi elde anlamına gelir.

Dereferans işlemi, * veya -> işleci ile yapılır. it bir MachineState idi

Eğer it bir MachineState bir işaretçi olsaydı, sen it bir MachineState bir yineleyici olsaydın it->point1 veya (*it).point1

kullanabilirsiniz, it.point1

kullanabilirsiniz it->point1 veya (*it).point1

'u da kullanabilirsiniz. it yana

bir MachineState işaretçisi bir yineleyici, sen (*it)->point1 veya (**it).point1 doğru cevabı var

+0

kullanmalıdır olduğunu. Üzgünüm, C++ 'da yeni başlayan biriyim. Bana ders dışı bırakarak ne demek istediğini söyler misin? Cevabınız için çok teşekkürler –

+0

@JohnKemp Düzenleme bölümüne bakın. –

+1

Teşekkürler @DrewDormann. Şimdi anladım –