2009-07-30 10 views
29

के साथ सहायता क्या जावा में मौजूद सी ++ में एक स्थिर विधि से ऑब्जेक्ट को वापस करना संभव है? मैं यह कर रहा हूं:सी ++ स्थिर विधि

class MyMath { 
    public: 
     static MyObject calcSomething(void); 
    private: 
}; 

और मैं ऐसा करना चाहते हैं:

int main() { 
    MyObject o = MyMath.calcSomething(); // error happens here 
} 

MyMath कक्षा में केवल स्थिर तरीकों रहे हैं, तो यह instantiating करने का कोई मतलब नहीं है। लेकिन मुझे यह संकलन त्रुटि मिलती है:

MyMath.cpp: 69: त्रुटि: 'प्राथमिक' से पहले प्राथमिक अभिव्यक्ति अपेक्षित। टोकन

मैं क्या गलत कर रहा हूं? क्या MyMath को तुरंत चालू करने के लिए है? यदि यह संभव है तो मैं नहीं चाहूंगा।

उत्तर

73

.

के बजाय :: का उपयोग करें

MyObject o = MyMath::calcSomething();

जब आप कक्षा के ऑब्जेक्ट के बिना विधि को कॉल कर रहे हैं तो आपको :: नोटेशन का उपयोग करना चाहिए। तुम भी उन्हें वर्ग वस्तुओं या संकेत के माध्यम से स्थिर विधि कॉल कर सकते हैं, इस मामले में आप हमेशा की तरह . या -> संकेतन का उपयोग करना चाहिए:

MyObject obj; 
MyObject* p = new MyObject(); 

MyObject::calcSomething(); 
obj.calcSomething(); 
p->calcSomething(); 
+8

+1 यह देखते हुए कि तुम अब भी के माध्यम से वस्तु> अंकन एक स्थिर समारोह कॉल कर सकते हैं के लिए। –

12

What am I doing wrong?

आप बस गलत सिंटैक्स का उपयोग कर रहे हैं ... :: ऑपरेटर (scope resolution operator) कैसे आप अलग अलग नामस्थान में कक्षाएं या सदस्यों का उपयोग होता है:

int main() { 
    MyObject o = MyMath::calcSomething(); // correct syntax 
} 

Do I have to instantiate MyMath?

सं

1

इस मामले के लिए, यदि आप चाहते MyMath :: calcSomething()। '।' वाक्यविन्यास वस्तुओं में कार्यों को कॉल करने के लिए है। :: वाक्यविन्यास किसी वर्ग या नामस्थान में फ़ंक्शंस कॉल करने के लिए है।

1

इस तरह का प्रयास करें

#include <iostream> 
using namespace std; 
class MyMath { 
public: 
    static MyMath* calcSomething(void); 
private: 
}; 
MyMath* MyMath::calcSomething() 
{ 
    MyMath *myMathObject=new MyMath; 
    return myMathObject; 
} 
int main() 
{ 
    MyMath *myMathObject=MyMath::calcSomething(); 
    /////Object created and returned from static function calcSomeThing 
} 

धन्यवाद

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