2013-01-03 15 views
12

नहीं है यह मेरे कार्यक्रम से एक वर्ग है! जब मैं पूरे कार्यक्रम को संकलित करने के कोशिश कर रहा हूँ, मैं इस तरह कोई त्रुटि संदेश प्राप्त:में कक्षा प्रकार C++

main.cpp:174: error: '((Scene*)this)->Scene::lake' does not have class type

स्रोत

class Scene 
{ 
    int L,Dist; 
    Background back ; 
    Lake lake(int L); 
    IceSkater iceskater(int Dist); 
public : 
    Scene(int L, int Dist) 
    { 
     cout<<"Scene was just created"<<endl; 
    } 

    ~Scene() 
    { 
     cout<<"Scene is about to be destroyed !"<<endl; 
    } 
}; 
+5

झील एक विधि है, एक चर झील झील (int एल); lake.light_up(); // यह समझ में नहीं आता – DGomez

+0

झील एक वर्ग है और मैं कक्षा दृश्य में अपनी ऑब्जेक्ट झील बनाने की कोशिश कर रहा हूं –

+0

निश्चित रूप से एक वर्ग है, लेकिन झील (लोकेस में) एक विधि है, और आप एक विधि को कॉल करने का प्रयास कर रहे हैं वह वस्तु, यह रेखा गलत है, lake.light_up(); – DGomez

उत्तर

13

आपकी समस्या निम्न पंक्ति में है:

Lake lake(int L); 

तुम सिर्फ एक Lake वस्तु घोषित करने के लिए प्रयास कर रहे हैं तो आप शायद (int L) निकालना चाहते हैं। आपके पास क्या है lake फ़ंक्शन घोषित करना जो Lake देता है और पैरामीटर के रूप में int स्वीकार करता है।

आप एल में पारित करने के लिए जब अपने lake वस्तु के निर्माण की कोशिश कर रहे हैं, तो मुझे लगता है कि आप अपने कोड इस तरह देखना चाहते हैं:

class Scene 
{ 
    int L,Dist; 
    Background back ; 
    Lake lake; 
    IceSkater iceskater; 
public : 
    Scene(int L, int Dist) : 
     L(L),  
     Dist(Dist), 
     lake(L), 
     iceskater(Dist) 
    { 
     cout<<"Scene was just created"<<endl; 
    } 
..... 

सूचना 4 लाइनों अपने निर्माता को जोड़ा गया। इसे सदस्य प्रारंभिक कहा जाता है, और यह आप सदस्य चर का निर्माण कैसे करते हैं। इस faq में इसके बारे में और पढ़ें। या कुछ अन्य tidbits मुझे here और here मिला।

3

आप एक विधि है कि एक तर्क लेता है और एक Lake रिटर्न के रूप में lake घोषणा करते हैं। फिर आप lake.light_up() के माध्यम से उस पर एक विधि को आजमाएं और कॉल करें। यह आपके द्वारा देखी जाने वाली त्रुटि का कारण बनता है।

समस्या को हल करने के लिए, आपको या तो एक चर होने के लिए lake घोषित करने की आवश्यकता है, उदा। Lake lake;, या आपको उस पर एक विधि कॉल करने की कोशिश करना बंद करना होगा।

1

आप घोषित कर दिया है (लेकिन कभी परिभाषित) lake दृश्य के एक सदस्य समारोह के रूप में:

class Scene 
{ 
    // ... 
    Lake lake(int L); 

लेकिन तब plot में, आप के रूप में अगर यह एक चर थे lake इस्तेमाल करने की कोशिश:

int plot() 
{ 
    lake.light_up(); 
संबंधित मुद्दे