2010-09-15 10 views
6

अभी मेरे पास कक्षा A है जो कक्षा B से विरासत में है, और B में कोई डिफ़ॉल्ट कन्स्ट्रक्टर नहीं है। मैं B के निर्माता के लिए ठीक उसी पैरामीटर है कि A के लिए एक निर्माता बनाने की कोशिश कर रहा हूँ, लेकिन मैं मिलता है:क्लास से डिफॉल्ट कन्स्ट्रक्टर के बिना कक्षा से विरासत में मिली

error: no matching function for call to ‘B::B()’ 
note: candidates are: B::B(int) 

मैं कैसे इस त्रुटि को ठीक होगा?

+0

कृपया अपना वर्तमान कोड –

+0

@Ramon Zarazua पोस्ट करें - क्यों? मुझे पहले से ही जवाब मिल गया है ... – wrongusername

उत्तर

14

निर्माता इस तरह दिखना चाहिए:

A(int i) : B(i) {} 

बिट के बाद पेट के मतलब है, "अपने int निर्माता का उपयोग कर इस वस्तु के बी आधार वर्ग उप वस्तु को प्रारंभ, मूल्य मैं के साथ"।

मुझे लगता है कि आपने बी के लिए प्रारंभकर्ता प्रदान नहीं किया है, और इसलिए डिफ़ॉल्ट रूप से संकलक गैर-मौजूद नो-Args कन्स्ट्रक्टर के साथ इसे प्रारंभ करने का प्रयास करता है।

+0

इसका अर्थ समझने के लिए धन्यवाद, स्टीव! मुझे एहसास नहीं हुआ कि एक प्रारंभकर्ता था – wrongusername

2

आपको अपनी कक्षा की आरंभकर्ता सूची के माध्यम से बेस कन्स्ट्रक्टर का आह्वान करने की आवश्यकता है।

उदाहरण:

class C : public B 
{ 
public: 
    C(int x) : B(x) 
    { 
    } 

}; 

आप बी को प्रारंभ नहीं करते हैं स्पष्ट रूप से यह डिफ़ॉल्ट निर्माता जो कोई पैरामीटर है उपयोग करने के लिए कोशिश करेंगे।

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