c++ - C++中跨多个文件的类

标签 c++

我几乎 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/

相关文章:

c++ - 如何使用 scanf 验证输入

c++ - 枚举与数组

c++ - 字符串输出不完整 - 奇怪的行为

c++ - Qt 中进程的有趣任务

c++ - #include 指令的正确格式

c++ - 在缓冲区中管理 C++ 对象,考虑对齐和内存布局假设

c++ - Xcode将简单的C++ 20代码段标记为错误,但使用最新的LLVM 10.0.0 Clang编译器正确编译

c++ - boost::arm64 的上下文?

C++ INT_MAX加1,为什么返回的是INT_MIN?

c++ - 关闭 Qt 中的所有小部件,除了一些