2011-12-31 20 views
14

मैं इस कष्टप्रद त्रुटि हो रही है और मैं नहीं जानता कि क्यों = ( यह सवाल है, मैं इसे हल लेकिन मैं निर्माता के साथ एक समस्या हो रहा हैत्रुटि C2512: कोई उचित डिफ़ॉल्ट निर्माता उपलब्ध

!।

एक प्रोग्राम लिखें जो सर्किल नामक एक वर्ग को परिभाषित करता है जिसमें डेटा सदस्यों के रूप में त्रिज्या (टाइप डबल) शामिल है। इस डेटा सदस्य के लिए एक सेट और एक फंक्शन प्रदान करें। सुनिश्चित करें कि उपयोगकर्ता द्वारा दर्ज किया गया मान मान्य और सही है (अधिक शून्य से)
फ़ंक्शन सदस्यों को शामिल करें: ए.फंक्शन सदस्य जो गणना करता है और सर्कल बी। फ़ंक्शन सदस्य का व्यास देता है जो गणना करता है और वापसी सर्कल c.function सदस्य की गणना परिमाण और सर्कल डी। फ़ंक्शन सदस्य का क्षेत्रफल जो सभी सर्कल e.constructor की जानकारी प्रदर्शित करता है जो डेटा सदस्य प्रारंभ करता है। यदि त्रिज्या वैध नहीं है (यानी शून्य से कम) इसे शून्य पर सेट करें।

त्रुटि मैं का सामना करना पड़ रहा हूँ:

त्रुटि C2512: 'सर्किल': कोई उचित डिफ़ॉल्ट निर्माता उपलब्ध

यह मेरा कोड है:

#include <iostream> 

    using namespace std; 

    class Circle 
     { 
      public: 

      Circle(double); 
      void setRadius(double); 
      double getRadius(); 
      void Display(); 
      double Diameter(double); 
      double Circumference(double); 
      double Area(double); 

      private: 

      double radius; 

     }; 

     Circle::Circle(double radio) 
      { 
       setRadius(radio); 
      } 

     void Circle::setRadius(double ra) 
      { 
       if (ra < 0) 
       { 
        radius = 0; 
       } 
       else 
        radius = ra; 
      } 

     double Circle::getRadius() 
      { 

       double rado; 

      cout << "Enter the Radius:\n"; 
      cin >> rado; 
      setRadius(rado); 

      return radius; 
      } 

     double Circle::Diameter(double rad) 
      { 
       return 2*rad; 
      } 

     double Circle::Area(double radi) 
      { 
       return 3.14 * radi * radi; 
      } 


     double Circle::Circumference(double radiu) 
      { 
       return 2 * 3.14 * radiu; 
      } 

     void Circle::Display() 
     { 
      cout << "The Radius of the circle is: \n"; 
      cout << radius; 
      cout << "\nThe Diameter of the circle is: \n"; 
      cout << Diameter(radius); 
      cout << "\nThe Circumference of the circle is: \n"; 
      cout << Circumference(radius); 
      cout << "\nThe Area of the circle is: \n"; 
      cout << Area(radius); 
      cout << endl; 
     } 

     int main() 
     { 
      Circle C; 
      C.getRadius(); 
      C.Display(); 

      return 0; 
     } 
+1

मुझे लगता है कि आप गलत समझते हैं कि सदस्य कार्य कैसे दिखना चाहिए। आपका कोड विशेष रूप से ऑब्जेक्ट उन्मुख शैली का पालन नहीं करता है। उदाहरण के लिए, मुझे 'सीएरिया() 'को कॉल करके सर्कल' सी' का क्षेत्र नहीं मिल सकता है। आपको इसे ठीक करना चाहिए। साथ ही, क्या कोई विशेष कारण है कि आपके सभी तर्कों के अलग-अलग नाम हैं, यह भी सोचा कि वे * सभी * त्रिज्या को संदर्भित करते हैं? ऐसा मत करो, सुसंगत रहें। –

+0

आपका कन्स्ट्रक्टर सदस्य फ़ंक्शन का उपयोग करने का प्रयास करता है, इसके लिए, पहले से ही एक ऑब्जेक्ट होना चाहिए, इसलिए एक कन्स्ट्रक्टर को पहले समाप्त होना आवश्यक है। आपको कन्स्ट्रक्टर बॉडी में प्रवेश करने से पहले अपने प्रकार के कन्स्ट्रक्टर का उपयोग करके सदस्य चर प्रारंभ करना चाहिए। –

उत्तर

2

ठीक है, फिर एक जोड़ें :)

Circle() : radius(0.0) {} 
5

एक डिफ़ॉल्ट कन्स्ट्रक्टर बिना किसी पैरामीटर के एक है। आम तौर पर, यह आपके लिए प्रदान किया जाता है। लेकिन अगर आप स्पष्ट रूप से किसी अन्य निर्माता को परिभाषित करते हैं, तो यह नहीं है। तो आपको इसे स्वयं परिभाषित करना होगा, या इसका उपयोग नहीं करना होगा। आप इसे उपयोग कर रहे हैं जब आप मुख्य में एक वस्तु बनाने के लिए, इस तरह:

Circle C; 

तो, या तो एक डिफ़ॉल्ट निर्माता निर्धारित करें, या उसका उपयोग नहीं करते।

Circle C; 

केवल निर्माता आपके द्वारा परिभाषित है:

Circle(double); 

उम्मीद है कि इस सही दिशा में ले जाना चाहिए

+0

धन्यवाद, इस समस्या को हल किया गया, मैंने निर्माता को परिभाषित किया कि इसमें कोई पैरामीटर नहीं है और सबकुछ ठीक से काम करता है :)! – user1092492

+3

@ user1092492 लेकिन यह एक बुरा समाधान है। सोचो: क्या कोई त्रिज्या वाला सर्कल रखना समझ में आता है? नहीं। आपकी कक्षा को एक डिफ़ॉल्ट कन्स्ट्रक्टर परिभाषित नहीं करना चाहिए। –

14

यह पंक्ति एक (डिफ़ॉल्ट निर्माता के रूप में जाना जाता है) कोई तर्क के साथ निर्माता का आह्वान ।

-1

आपको डिज़ाइनर को परिभाषित करना चाहिए जिसमें डिफ़ॉल्ट कन्स्ट्रक्टर नामक पैरामीटर नहीं हैं। आप संबंधित सदस्यों को डिफ़ॉल्ट मानों में प्रारंभ कर सकते हैं।

Circle::Circle() 
    { 
    radius = 0.0 
    } 
+0

कक्षा सदस्य चर प्रारंभिक सूची (जैसे लुसकान ने किया है) के माध्यम से शुरू किया जाना चाहिए, और कन्स्ट्रक्टर बॉडी में नहीं - जब तक कि कोई बहुत अच्छा कारण न हो (मुझे यहां कोई कारण नहीं दिखता)। यदि त्रिज्या एक गैर-पीओडी था, तो इसे दो बार शुरू किया जा सकता था। – brewmanz

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