2011-12-31 18 views
14

bu can sıkıcı hata alıyorum ve = (Bu soru , ben onu çözdüm neden bilmiyorum ama yapıcı bir sorun yaşıyorumhata C2512: hiçbir uygun varsayılan yapıcı

!.

Veri üyeleri olarak yarıçap (çifte çift) içeren bir Çember sınıfı tanımlayan bir program yazın.Kullanıcı için bir küme ve alma işlevi sağlayın.Kullanıcı tarafından girilen değerin geçerli ve doğru olduğundan emin olun sıfır)
İşlev üyelerini ekleyin: hesaplayan ve döndüren daire işlevini gerçekleştiren bir işlev üyesi olan bir işlev üyesi ve döngünün çevresi çemberin c.function üyesi ve Döngü alanı tüm bilgilerini görüntüleyen daire e.constructor bilgilerini görüntüle üye. Yarıçap geçerli değilse (yani sıfırdan azsa) sıfıra ayarlayın.

hata Karşılıklı:

hata C2512: 'Çember':

hiçbir uygun varsayılan yapıcısı

bu benim kodudur:

#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

Üye işlevlerinin nasıl görünmesi gerektiğini yanlış anlamışsınızdır. Kodunuz özellikle nesne yönelimli bir stili takip etmiyor. Mesela, 'C' çemberinin alanını 'C.Area() 'diyerek alamıyorum. Bunu düzeltmelisin. Ayrıca, tüm argümanlarınızın farklı isimlere sahip olmalarının bir nedeni var mıdır? * Hepsi * yarıçapı ifade eder? Bunu yapma, tutarlı ol. –

+0

Yapıcınız bir üye işlevini kullanmayı dener, bunun için zaten bir nesne olmalıdır, bu nedenle kurucunun daha önce bitmiş olması gerekir. Üye değişkenleri yapıcı gövdesine girmeden önce türünde bir kurucu kullanarak başlatmalısınız. –

cevap

2

Eh, sonra bir tane ekleyin :)

Circle() : radius(0.0) {} 
5

Varsayılan bir kurucu, parametresizdir. Normalde, sizin için sağlanır. Ama açıkça başka bir kurucu tanımlarsanız, o zaman değil. Yani onu kendiniz tanımlamanız ya da kullanmamanız gerekiyor.

Circle C; 

Yani, varsayılan kurucusu tanımlamak ya ya da kullanmayın: Eğer ana bir nesne oluştururken bu gibi bunu kullanıyor.

Circle C; 

tanımladığınız tek yapıcısı olduğu:

Circle(double); 

Umarım bu doğru yönde işaret etmelidir

+0

Teşekkürler, Sorunu çözdüm, hiçbir parametreyle yapıcıyı tanımladım ve her şey yolunda gitti :)! – user1092492

+3

@ user1092492 Ama bu kötü bir çözüm. Düşün: yarıçapı olmayan bir daireye sahip olmak mantıklı mıdır? Hayır. Sınıfınız varsayılan kurucu tanımlamamalıdır. –

14

Bu hat (varsayılan yapıcı olarak bilinir) herhangi bir arguman kurucuya başvuran .

-1

Varsayılan kurucu olarak adlandırılan parametresi olmayan bir kurucu tanımlamanız gerekir. İlgili üyeleri varsayılan değerlere başlatabilirsiniz.

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

Sınıf üyesi değişkenleri, başlatma listesi (luskan'ın yaptığı gibi) ve yapıcı gövdesinde değil - çok iyi bir neden olmadığı sürece (burada böyle bir neden görmüyorum) başlatılmalıdır. Yarıçap POD olmayan bir ise, başlangıç ​​TWICE olabilir. – brewmanz

İlgili konular