2016-12-07 11 views
1

다른 오류가있는 일부 페이지를 검색했지만 코드에서 찾을 수있는 문제가 없습니다. 미안하다면 피곤하고 C++에 약간 새로운 것일 수도 있습니다.클래스 C++의 재정의 - Xcode

3 개의 파생 클래스가있는 부모 클래스 shape.h가 있습니다. rectangle.h, triangle.h 및 circle.h. 부모 클래스는 세 번째 줄에 "Shape '의 재정의"Redefinition "을 가져 오는 클래스입니다. 내 인생에서 내가 틀린 것을 알아낼 수는 없지만 파생 된 클래스에서 모양 생성자를 호출하는 방법은 가능합니다. 제발, 저에게 알려주세요.

Shape.h :
#INCLUDE < cmath>

class Shape 
{ 
public: 
    //constructors 
    Shape(); 
    Shape(float a); 
    Shape(float a, float b); 

    //Returns 
    float area(); 
    float perimeter(); 

protected: 
    float base; 
    float height; 
    float radius; 
}; 

Shape.cpp :
사용법 #include "Shape.h"

//constructors 
Shape::Shape() 
{ 
    base = 0; 
    height = 0; 
    radius = 0; 
} 

Shape::Shape(float a) 
{ 
    radius = a; 
} 

Shape::Shape(float a, float b) 
{ 
    base = a; 
    height = b; 
} 

//returns 
float Shape::area() 
{ 
    return 0; 
} 

float Shape::perimeter() 
{ 
    return 0; 
} 

모든 파생 된 클래스

다른 제외한 동일 계산은 여기 Circle.h :
#include "Shape.h"

class Circle: public Shape 
{ 
public: 
    //constructors 
    Circle(); 
    Circle(float a); 

    //Returns 
    float area(); 
    float perimeter(); 

private: 

}; 

Circle.cpp는 :
사용법 #include "Circle.h"

//constructors 
Circle::Circle():Shape() 
{ 

} 

Circle::Circle(float a):Shape(a) 
{ 

} 

//returns 
float Circle::area() 
{ 
    return (3.14 * pow(radius,2)); 
} 

float Circle::perimeter() 
{ 
    return (2 * 3.14 * radius); 
} 

답변

1

간접적으로 포함 두번 원인 언급 한 컴파일 오류 Shape.hCircle.cpp합니다.

헤더에 include guard을 추가하십시오. 예 : Shape.h은 다음과 같아야합니다

#ifndef SHAPE_H 
#define SHAPE_H 

// Put your Shape class here 

#endif 

다른 방법은 컴파일러가 지원하는 경우 Shape.h의 beggining에 #pragma once을 사용하는 것입니다.

+1

감사합니다. 그러나 호기심에서 벗어나 정확히 무엇이 오류를 발생시키고 있는지 아십니까? – user6383357

+1

@ user6383357 가드가없는'Circle.cpp'에'Shape.h'가 간접적으로 두 번 포함되어있어 언급 한 컴파일 오류가 발생합니다. – Nikita

+0

고마워, 그 말이 맞는 것 같아. – user6383357