我几乎 100% 确定我在这两个类中的语法都是正确的,但是我遇到了以下错误:
对于 CShape.cpp -“错误 C2011:‘CShape’:‘类’类型重新定义” 对于 CCircle.cpp -“错误 CS2504:‘CShape’:基类未定义”
这里是 CShape.cpp 的完整代码
#include <iostream>
using namespace std;
class CShape
{
protected:
float area;
virtual void calcArea();
public:
float getArea()
{
return area;
}
}
这是 CCircle.cpp 的代码
#include <iostream>
#include "CShape.cpp"
#define _USE_MATH_DEFINES
#include "math.h"
using namespace std;
class CCircle : public CShape
{
protected:
int centerX;
int centerY;
float radius;
void calcArea()
{
area = M_PI * (radius * radius);
}
public:
CCircle(int pCenterX, int pCenterY, float pRadius)
{
centerX = pCenterX;
centerY = pCenterY;
radius = pRadius;
}
float getRadius()
{
return radius;
}
}
如您所见,CShape 是 CCircle 支持继承的基类。我是 C++ 的新手,所以我可能会把文件结构弄错(也许基础应该在头文件中?),如果类似的事情很重要的话。
最佳答案
永远不要#include .cpp 文件;这将导致您遇到的那种重新定义错误。相反,声明头文件中的类并#include 那个类,然后定义 .cpp 文件中的类方法。
// CShape.h
class CShape
{
protected:
float area;
virtual void calcArea();
public:
float getArea();
}
.cpp 文件:
// CShape.cpp
#include "CShape.h"
#include <iostream>
using namespace std;
float CShape::getArea() {
return area;
}
您应该类似地拆分 CCircle - CCircle.h 应该#include CShape.h,CCircle.cpp 应该#include CCircle.h。
关于c++ - C++中跨多个文件的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11812014/