2013-04-24 10 views
10

मेरे पास "मशीनस्टेट" संरचना है और मैंने "मशीनस्टेट *" प्रकार की एक सूची बनाई है। मैं "अभिव्यक्ति में पॉइंटर-टू-क्लास-टाइप होना चाहिए

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

मैं माइक्रोसॉफ्ट विजुअल स्टूडियो 10 का उपयोग कर रहा मैं त्रुटि googled और सब मैं बाहर मिल सकता था" मिलती रहती है जब मैं सूची के माध्यम से पुनरावृति करने की कोशिश करो -> ऑपरेटर एक वर्ग, struct लौटना चाहिए , या संघ, या एक के लिए एक संदर्भ। "

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; 

यहाँ है, जहां मैं अपने सूची के माध्यम से पुनरावृति करने के लिए कोशिश करते हैं और मैं त्रुटि मिलती रहती है, पर" यह-> बिंदु 1 "कह रहा है कि टी अभिव्यक्ति में कक्षा के प्रकार के लिए एक सूचक होना चाहिए।

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

उत्तर

19

it है मुझे समझा सकता है तो एक MachineState करने के लिए एक सूचक के लिए एक iterator है।

आपको सूचक को और पॉइंटर को हटाना होगा।

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

संपादित करें:

अपसंदर्भन मतलब है बात यह है कि यह की चर्चा करते हुए है हो रही है।

Dereferencing * या -> ऑपरेटर के साथ किया जाता है।

तो it एक MachineState थे, तो आप it.point1

इस्तेमाल कर सकते हैं, तो it एक MachineState करने के लिए एक सूचक थे, तो आप it->point1 या (*it).point1

इस्तेमाल कर सकते हैं, तो it एक MachineState करने के लिए एक इटरेटर थे, आप it->point1 या (*it).point1

का भी उपयोग कर सकते हैं

it के बाद से एक एक MachineState के लिए सूचक को iterator, आप (*it)->point1 या (**it).point1

+0

सही जवाब है कि का उपयोग करना चाहिए है। मुझे खेद है, मैं सी ++ में शुरुआत कर रहा हूं। क्या आप मुझे बताएंगे कि आपका मतलब क्या है? उत्तर के लिए बहुत बहुत धन्यवाद –

+0

@JohnKemp मेरा संपादन देखें। –

+1

धन्यवाद @DrewDormann। अब मुझे समझ आई –

संबंधित मुद्दे