我几乎百分之百确定我在这两个类中的语法都是正确的,但是我得到了以下错误:
对于CShape.cpp - "error C2011:'CShape':' class‘类型重定义“For CCircle.cpp - "error 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++还很陌生,所以我可能会把文件结构弄错(也许基文件应该在一个头文件中?),如果这样的事情很重要。
发布于 2012-08-05 05:10:54
切勿使用#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。
发布于 2012-08-05 05:26:15
正如您所猜到的,您应该将类组织在单独的声明文件(头文件)和定义文件(.cpp文件)中。您可以在头文件中将成员函数定义(带有主体)保留为内联(建议)。在你的头文件中放入适当的include拦截器,以避免多个类声明。
CShape.h:
#ifndef __CSHAPE_H__
#define __CSHAPE_H__
class CShape
{
protected:
float area;
virtual void calcArea();
public:
float getArea()
{
return area;
}
};
#endifCShape.cpp:
#include "CShape.h"
void CShape::calcArea()
{
// Your implementation
}CCircle.h:
#ifndef __CCIRCLE_H__
#define __CCIRCLE_H__
#include "CShape.h"
class CCircle : public CShape
{
protected:
int centerX;
int centerY;
float radius;
virtual void calcArea();
{
area = M_PI * (radius * radius);
}
public:
CCircle(int pCenterX, int pCenterY, float pRadius);
inline float getRadius()
{
return radius;
}
};
#endifCCircle.cpp:
#include "CCircle.h"
CCircle::CCircle(int pCenterX, int pCenterY, float pRadius)
: centerX(pCenterX)
, centerY(pCenterY)
, radius(pRadius)
{
}https://stackoverflow.com/questions/11812014
复制相似问题