2011-12-31 2 views
14

나는이 짜증나는 오류가 오전 = (이 질문은 , 나는 그것을 해결하는 이유 나도 몰라하지만 난 생성자에 문제가 있어요오류 C2512 : 자료 없음 적절한 기본 생성자

!.

반원 (double 유형)을 데이터 멤버로 포함하는 Circle 클래스를 정의하는 프로그램을 작성하고이 데이터 멤버에 대해 집합과 가져 오기 기능 을 입력합니다. 사용자가 입력 한 값이 이고 올바른지 0보다 큼)
함수 멤버를 포함합니다. 계산하고 반환하는 a.function 멤버 계산하는 원 b.function 멤버의 직경 및 return 계산할 원 c.function 멤버의 둘레와 반환 원을 표시하는 영역 d.function 멤버 모두 표시 데이터를 초기화하는 원 e.constructor의 정보 멤버. 반경이 유효하지 않은 경우 (예 : 0 미만) 으로 설정합니다.

오류 내가 직면하지 오전 :

오류 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

회원 기능이 어떻게 보일지 오해 한 것 같습니다. 코드가 특히 객체 지향 스타일을 따르지 않습니다. 예를 들어,'C.Area() '를 호출하여 원의'C'영역을 가져올 수 없습니다. 그걸 고쳐야 해. 또한, 귀하의 모든 주장이 다른 이름을 가지고있는 특별한 이유가 있습니까? * 모두 *가 반지름을 참조한다고 생각하십니까? 그렇게하지 마시고 일관성있게하십시오. –

+0

생성자가 멤버 함수를 사용하려고 시도하기 때문에 이미 생성자가 있어야하므로 생성자를 완료해야합니다. 생성자 본문을 입력하기 전에 유형의 생성자를 사용하여 멤버 변수를 초기화해야합니다. –

답변

2

음, 다음 하나 추가 :

Circle() : radius(0.0) {} 
5

기본 생성자는 매개 변수가없는 것입니다. 일반적으로, 그것은 당신을 위해 제공됩니다. 그러나 다른 생성자를 명시 적으로 정의하면 그렇지 않습니다. 따라서 직접 정의하거나 사용하지 않아야합니다. 다음과 같이 main에 객체를 만들 때이 객체를 사용하고 있습니다.

Circle C; 

따라서 기본 생성자를 정의하거나 사용하지 마십시오.

Circle C; 

사용자가 정의한 유일한 생성자는 다음과 같습니다 :

Circle(double); 

는 희망이 올바른 방향을 가리켜 야합니다

+0

고마워, 그게 문제를 해결, 나는 매개 변수와 모든 생성자가 괜찮아 생성자를 정의 :)! – user1092492

+3

@ user1092492하지만 나쁜 해결책입니다. 생각해보십시오 : 반경이없는 원을 갖는 것이 이치에 맞습니까? 아닙니다. 클래스에서 기본 생성자를 정의해서는 안됩니다. –

14

이 줄은 (기본 생성자로 알려진) 인수가없는 생성자를 호출 .

-1

기본 생성자라는 매개 변수없이 생성자를 정의해야합니다. 관련 구성원을 기본값으로 초기화 할 수 있습니다.

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

클래스 멤버 변수는 luskan이 완료 한 것처럼 초기화 목록을 통해 초기화되어야하며, 생성자 본문에는 초기화되지 않아야합니다. - 여기에는 그러한 이유가 없음을 알 수없는 아주 좋은 이유가없는 한. 반경이 POD가 아닌 경우 TWICE로 초기화 할 수 있습니다. – brewmanz

관련 문제