c++ - C++类的重新定义——Xcode

标签 c++ xcode inheritance polymorphism redefinition

我搜索了其他一些出现同样错误的页面,但我的代码没有任何我能找到的问题。可能只是因为我对 C++ 感到厌倦和有点陌生,如果真的很抱歉。

我有一个父类 shape.h,它有三个派生类; rectangle.h、triangle.h 和 circle.h。父类是在第三行出现错误“重新定义‘Shape’”的类。对于我的生活,除了我从派生类调用形状构造函数的可能方式外,我无法弄清楚出了什么问题。请帮忙,如果您需要任何信息,请告诉我。

形状.h:
#include

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;
};

形状.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:

};

圆.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);
}

最佳答案

Circle.cpp Shape.h 中间接包含两次并导致提到的编译错误。

添加include guard到你的标题。例如。 Shape.h 应该是:

#ifndef SHAPE_H
#define SHAPE_H

// Put your Shape class here 

#endif

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

关于c++ - C++类的重新定义——Xcode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41010239/

相关文章:

objective-c - 单击 UIWebView 上的链接时打开新的 UIViewController

Unity 应用程序的 iOS 崩溃

Java:当 super 构造函数需要参数时如何初始化 child

c# - 我可以使用显式运算符来创建派生类吗?

c# - 我可以让一个类在内部不密封但在外部密封吗?

c++ - 二分查找的逻辑

c++ - read() 返回在某些系统上读取的错误字节数

C++ 通过指针访问对象而不是直接访问

c++ - 图像c++,opencv中均匀性/同质性的测量

ios - UIImageView 不动