重新定义C ++类 - Xcode

时间:2016-12-07 05:44:56

标签: c++ xcode inheritance polymorphism redefinition

我使用同样的错误搜索了其他一些页面,但是我的代码没有我能找到的任何问题。可能只是因为我很累而且对C ++稍微有些新意,如果这样抱歉的话。

我有一个父类shape.h,它有三个派生类; rectangle.h,triangle.h和circle.h。父类是得到错误的一个"重新定义'形状'"在第三行。对于我的生活,除了可能从派生类调用形状构造函数的方式之外,我无法弄清楚出了什么问题。请帮助,您需要的更多信息,请告诉我。

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 个答案:

答案 0 :(得分:1)

Circle.cpp Shape.h中间接包含两次,导致编译错误。

include guard添加到标头中。例如。 Shape.h应该是:

#ifndef SHAPE_H
#define SHAPE_H

// Put your Shape class here 

#endif

另一种方法是在#pragma once的开头使用Shape.h,如果您的编译器支持它。