Class C++ 的重新定义 - Xcode
Redefinition of Class C++ - Xcode
我搜索了其他一些出现同样错误的页面,但我的代码没有任何我能找到的问题。可能只是我累了,对 C++ 有点陌生,抱歉。
我有一个父 class、shape.h,它有三个派生的 class; rectangle.h、triangle.h 和 circle.h。父 class 是在第三行出现错误 "Redefinition of 'Shape'" 的那个。对于我的生活,除了我从派生的 classes 调用形状构造函数的可能方式外,我无法弄清楚什么是错的。请帮助,如果您需要任何信息,请告诉我。
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;
};
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;
}
所有派生的class都是相同的,只是计算不同,所以这里是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);
}
在 Circle.cpp
Shape.h
中间接包含两次并导致提到的编译错误。
将 include guard 添加到您的 headers。例如。 Shape.h
应该是:
#ifndef SHAPE_H
#define SHAPE_H
// Put your Shape class here
#endif
如果您的编译器支持,另一种方法是在 Shape.h
的开头使用 #pragma once
。
我搜索了其他一些出现同样错误的页面,但我的代码没有任何我能找到的问题。可能只是我累了,对 C++ 有点陌生,抱歉。
我有一个父 class、shape.h,它有三个派生的 class; rectangle.h、triangle.h 和 circle.h。父 class 是在第三行出现错误 "Redefinition of 'Shape'" 的那个。对于我的生活,除了我从派生的 classes 调用形状构造函数的可能方式外,我无法弄清楚什么是错的。请帮助,如果您需要任何信息,请告诉我。
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;
};
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;
}
所有派生的class都是相同的,只是计算不同,所以这里是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);
}
在 Circle.cpp
Shape.h
中间接包含两次并导致提到的编译错误。
将 include guard 添加到您的 headers。例如。 Shape.h
应该是:
#ifndef SHAPE_H
#define SHAPE_H
// Put your Shape class here
#endif
如果您的编译器支持,另一种方法是在 Shape.h
的开头使用 #pragma once
。