2012-03-22 7 views
23
int CPMSifDlg::EncodeAndSend(char *firstName, char *lastName, char *roomNumber, char *userId, char *userFirstName, char *userLastName) 
{ 
    ... 

    return 1; 
} 

extern "C" 
{ 
    __declspec(dllexport) int start(char *firstName, char *lastName, char *roomNumber, char *userId, char *userFirstName, char *userLastName) 
    { 
     return CPMSifDlg::EncodeAndSend(firstName, lastName, roomNumber, userId, userFirstName, userLastName); 
    } 
} 

लाइन return CPMSifDlg::EncodeAndSend पर मुझे एक त्रुटि है: त्रुटि: एक nonstatic सदस्य संदर्भ किसी विशिष्ट वस्तु के सापेक्ष होना चाहिए।क्या करता है "त्रुटि: एक nonstatic सदस्य संदर्भ एक विशिष्ट वस्तु के सापेक्ष होना चाहिए" मतलब?

इसका क्या अर्थ है?

उत्तर

27

EncodeAndSend एक स्थिर समारोह, नहीं है जो इसका मतलब है कि इसे कक्षा CPMSifDlg के उदाहरण पर बुलाया जा सकता है। आप यह नहीं लिख सकते हैं:

CPMSifDlg dlg; //create instance, assuming it has default constructor! 
dlg.EncodeAndSend(/*...*/); //correct 
+0

लेकिन अगर मैं "सीपीएमएसआईएफएलजी" को हटा देता हूं, तो मुझे "त्रुटि: पहचानकर्ता एनकोड एंडसेन्ड अनिर्धारित है" –

+0

@ ऑस्करयुंडिनटाटा: क्या आपने मेरे जवाब में जो कहा मैंने पढ़ा? – Nawaz

+0

इस तरह से सही है? 'CPMSifDlg dlg; \t \t वापसी dlg.EncodeAndSend (firstName, lastName, roomNumber, userId, userFirstName, userLastName); ' यह कहता है कि विधि दुर्गम –

7

CPMSifDlg::EncodeAndSend() विधि गैर -static के रूप में घोषित की गई है और इस प्रकार इसे CPMSifDlg की ऑब्जेक्ट का उपयोग करके बुलाया जाना चाहिए। जैसे

CPMSifDlg obj; 
return obj.EncodeAndSend(firstName, lastName, roomNumber, userId, userFirstName, userLastName); 

EncodeAndSend उपयोग नहीं करता है/एक वस्तु के किसी भी बारीकियों से संबंधित (यानी this) लेकिन सामान्य के लिए class CPMSifDlg तो static के रूप में यह घोषणा करते हैं:

class CPMSifDlg { 
... 
    static int EncodeAndSend(...); 
    ^^^^^^ 
}; 
6

केवल स्थिर कार्यों वर्ग के नाम के साथ कहा जाता है:

CPMSifDlg::EncodeAndSend(/*...*/); //wrong - EncodeAndSend is not static 

यह बल्कि के रूप में बुलाया जाना चाहिए।

classname::Staicfunction(); 

वस्तुओं का उपयोग करके गैर स्थैतिक कार्यों को बुलाया जाना चाहिए।

classname obj; 
obj.Somefunction(); 

यह आपकी त्रुटि का बिल्कुल सही है। चूंकि आपका फ़ंक्शन गैर स्थैतिक है, इसलिए आपको इसे ऑब्जेक्ट करने के लिए ऑब्जेक्ट संदर्भ का उपयोग करना होगा।

+0

काम करता है मुझे नहीं लगता कि यह सख्ती से सच है। यदि किसी व्युत्पन्न कक्षा के अंदर से बेस क्लास में गैर-स्थैतिक विधि को कॉल करना है तो वाक्यविन्यास बेस :: फ़ंक्शन() का उपयोग किया जाता है। – Flakker

+0

यदि व्युत्पन्न आपकी विधि गैर स्थैतिक है। –

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