2013-02-11 5 views
5

मैं संकलन त्रुटि मिलती है में वस्तु के बिना सदस्य फ़ंक्शन को कॉल नहीं कर सकतेत्रुटि - सी ++

cannot call member function ‘bool GMLwriter::write(const char*, MyList<User*>&, std::vector<std::basic_string<char> >)’ without object

जब मैं संकलन करने

class GMLwriter{ 
    public: 
    bool write(const char *fn, MyList<User*>& my_vec, vector<string>edges); 
}; 

समारोह

के साथ बाद में परिभाषित किया और main में कहा जाता है की कोशिश

GMLwriter::write(argv[3], Users, edges);

उपयोगकर्ता घोषित किया जाता है इससे पहले कि MyList<User*> Users; साथ (MyList एक सूची एडीटी है और मैं एक उपयोगकर्ता वर्ग है) और किनारों vector<string>edges

क्या object इस त्रुटि के लिए बात कर रहा है

साथ घोषित किया जाता है?

+0

आप ** यह फ़ंक्शन ** कैसे कॉल करते हैं? अनुमानों के बजाए आपको सही उत्तर प्राप्त करने के लिए कोड के उस भाग को दिखाने की आवश्यकता है। –

+0

@AlokSave 'GMLwriter :: लिखना (argv [3], उपयोगकर्ता, किनारों);' – user2059901

+0

वैसे तो यह ** परिभाषा नहीं है **, सी ++ में एक गैर स्थैतिक सदस्य समारोह को कॉल करने में सक्षम होने के लिए आपको कक्षा की आवश्यकता है वस्तु। कुछ ऐसा: 'जीएमएलआरआईटर ओबीजे; obj.write (...); ' –

उत्तर

18

GMLwriter::write GMLwriter का स्थिर कार्य नहीं है, आपको इसे ऑब्जेक्ट के माध्यम से कॉल करने की आवश्यकता है। उदाहरण के लिए:

GMLwriter gml_writer; 
gml_writer.write(argv[3], Users, edges); 

तो GMLwriter::write किसी भी GMLwriter राज्य (GMLwriter के किसी भी सदस्य का उपयोग) पर निर्भर नहीं करता, आप उसे स्थिर सदस्य समारोह बना सकते हैं। तो आप इसे सीधे वस्तु के बिना कह सकते हैं:

class GMLwriter 
{ 
public: 
    static bool write(const char *fn, MyList<User*>& my_vec, vector<string>edges); 
    ^^^^ 
}; 

तो आप कह सकते हैं:

GMLwriter::write(argv[3], Users, edges); 
1

GMLwriter एक वस्तु नहीं है, यह एक वर्ग के प्रकार है।

सदस्य कार्यों कॉलिंग एक वस्तु उदाहरण के लिए, यानी की आवश्यकता है:

GMLwriter foo; 
foo.write(argv[3], Users, edges); 

वहाँ एक अच्छा मौका है कि आप का इरादा समारोह मुक्त या स्थिर होने के लिए हालांकि:

class GMLwriter{ 
    public: 
    // static member functions don't use an object of the class, 
    // they are just free functions inside the class scope 
    static bool write(const char *fn, MyList<User*>& my_vec, vector<string>edges); 
}; 

// ... 
GMLwriter::write(argv[3], Users, edges); 

या

bool write(const char *fn, MyList<User*>& my_vec, vector<string>edges); 
// ... 
write(argv[3], Users, edges); 
0

आप

होने के लिए एक स्थिर विधि को कॉल/बनाने का प्रयास कर रहे हैं

इस मामले में, आप 'घोषणा' संशोधक के साथ अपनी घोषणा से पहले हो सकता है।

http://www.functionx.com/cppcli/classes/Lesson12b.htm

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