类类型重定义C ++

时间:2014-03-07 02:46:54

标签: c++ redefinition

我之前见过其他人问过这个问题,但他们收到的答案对他们的节目来说是独一无二的,遗憾的是我没有帮助。

首先,我有一个形状类 - 分为.h和.cpp文件

// Shape.h

    #include <string>
using namespace std;

class Shape
{
private:
    string mColor;

public:
    Shape(const string& color); // constructor that sets the color instance value
    string getColor() const; // a const member function that returns the obj's color val
    virtual double area() const = 0;
    virtual string toString() const = 0;
};

// Shape.cpp

#include "Shape.h"
using namespace std;

Shape::Shape(const string& color) : mColor(NULL) {
    mColor = color;
}
string Shape::getColor() const
{
    return mColor;
}

我的Shape.h类中一直出现错误,上面写着'Shape':'class'类型重新定义。 知道为什么我会收到这个错误吗?

2 个答案:

答案 0 :(得分:8)

include guard添加到您的标头文件

#ifndef SHAPE_H
#define SHAPE_H

// put your class declaration here

#endif

初始化成员mColor的方式不正确。您不能将NULL分配给字符串类型

Shape::Shape(const string& color) : mColor(color) {
}

将虚拟析构函数添加到Shape类,因为它作为具有虚函数的基础。

另外,请勿在头文件中使用using指令。

答案 1 :(得分:0)

好像你想在这里编写一个抽象基类,但是你有没有编译但是没有在这里显示的其他文件?


您必须再包含两次“shape.h”。 只需使用宏来防止这种情况。

PS:我猜Rectangle是Square的基类,也是继承Shape。