2012-03-13 16 views
5

यहाँ मेरा त्रुटि के कॉल के लिए कोई मिलता-जुलता समारोह ...त्रुटि:

"निर्माता में 'NumGame :: NumGame (int &)': त्रुटि: 'श्रेणी के लिए कॉल के लिए कोई मिलता-जुलता समारोह :: श्रेणी () '

Ive यहां कुछ समान प्रश्नों को देखा गया लेकिन ऐसा लगता है कि कोई जवाब नहीं मिल रहा है। मेरे पास बेस क्लास श्रेणी है और न्यूमगैम इसे विरासत में मिला है लेकिन संकलित नहीं होगा। त्रुटि के लिए

class Category { 

public: 
    void virtual selection(int&); 
    Category(int&); 
    virtual ~Category(){}; 
private: 
    int myRandNum; 
}; 

Category::Category(int& a){ 
    myRandNum = a; 
} 

void Category::selection(int& a){ 
    cout << "I am NumGame version number... " << a << endl; 
    cout << "Now Im playing... " << myRandNum << endl; 
} 

class NumGame : public Category { 

public: 
    void selection(int&); 
    NumGame(int&); 
    ~NumGame(){}; 
private: 
    int myRandNum; 
}; 

NumGame::NumGame(int& b){ 
    myRandNum = b; 
} 

void NumGame::selection(int& b) { 

} 

उत्तर

9

Category एक डिफ़ॉल्ट निर्माता नहीं है जब निर्माण:

NumGame::NumGame(int& b) : Category(b) 
{ 

} 

या

आप अपने आप को Category वर्ग के लिए एक नहीं तर्क constrcutor प्रदान करने की आवश्यकता CategoryNumGame का बेस ऑब्जेक्ट:

NumGame::NumGame(int& b) : 
    Category(b) 
{ 
    myRandNum = b; 
} 
+0

लेकिन क्या मैं अभी भी डिफॉल्ट कन्स्ट्रक्टर की सवारी करने पर नहीं हूं? और यदि मैं इसे सवारी नहीं करता हूं, तो डिफ़ॉल्ट कन्स्ट्रक्टर का उपयोग किया जाएगा, यही कारण है कि मेरे पास डिफ़ॉल्ट में तर्क हैं। बीटीडब्ल्यू दोनों उत्तरों ने मेरे कोड को संकलित करने का कारण बना दिया है, जाहिर है कि कुछ चीजें मुझे स्पष्ट नहीं हैं :) – Aikiman001

15

कारण:

जब आप व्युत्पन्न वर्ग NumGame बेस वर्ग Category कोई तर्क निर्माता वस्तु की Category हिस्सा बनाने के लिए कहा जाता है का एक उदाहरण बना सकते हैं। आपकी कक्षा में कोई नहीं है और संकलक इसके बारे में शिकायत करता है।

क्यों कंपेलर ने डिफ़ॉल्ट कन्स्ट्रक्टर को संश्लेषित नहीं किया?

बार जब आप अपने वर्ग संकलक निर्माता है जो आप के लिए किसी भी तर्क नहीं ले करता है संश्लेषण नहीं करता है के लिए किसी भी निर्माता प्रदान करते हैं यदि आपका कोड एक का उपयोग करता प्रदान करने के लिए अपने आप को कि है।

समाधान:

वहाँ त्रुटि से बचने के दो तरीके हैं:

कॉल बेस कक्षा में उचित उपलब्ध निर्माता के माध्यम से Catoegory subobject Member Initializer list। यह उस परिदृश्य को हटा देता है जहां आपका कोड कोई तर्क निर्माता नहीं है। ताकि आप तर्क की आपूर्ति की जरूरत है,

Category::Category() 
{ 

} 
+0

धन्यवाद – Aikiman001

+0

ग्रेट, एसओ पर एकमात्र उत्तर जिसने मुझे इसे ठीक करने में मदद की। : डी – lama12345

0

आपके NumGame कक्षा में आपको बेस क्लास के निर्माता को कॉल प्रदान करना होगा। यदि आप नहीं करते हैं, तो संकलक डिफ़ॉल्ट नियंत्रक के साथ आपके लिए यह करता है: आपके मामले में Category() जो आपके पास नहीं है ..