C ++继承/重新定义错误

c++ inheritance /redefinition error

形状头文件

错误:'Rectangle' 的构造函数必须显式初始化没有默认构造函数的基 class 'Shape'

 #ifndef Rectangle_hpp
#define Rectangle_hpp

#include "shape.hpp"

#include <stdio.h>

class Rectangle:public Shape{
    double m_length;
    double m_width;
public:
    Rectangle(double length,double width):Shape("Rectangle"){}
    double getPerimeter();
    double getArea();

};

#endif /* Rectangle_hpp */

Shape cpp 文件

错误:重新定义 'Rectangle'

#include "Rectangle.hpp"

#include "shape.hpp"
#include "Rectangle.hpp"

Rectangle::Rectangle(double length,double width):Shape("Rectangle"){
    m_length = length;
    m_width = width;
}
double Shape::getPerimeter(){
    return 2;
}
double Shape::getArea(){
    return 2;
}

BASE class 头文件

#ifndef shape_hpp
#define shape_hpp

#include <stdio.h>

class Shape{
    const char* m_name;
public:
    Shape(const char* name);
    virtual double getPerimeter()=0;
    virtual double getArea()=0;
    char getType();
};

#endif /* shape_hpp */

基础Classcpp文件

#include "shape.hpp"

Shape::Shape(const char* name){
    m_name = name;
}

char Shape::getType(){
    return *m_name ;
}

我制作了另一个 class "Circle",其布局与矩形相同,但没有出现任何错误,这些错误仅出现在矩形 class.. 我被卡住了并且有不知道为什么。

在您的头文件中,您定义了带有空主体的 Rectangle 构造函数 {}

在您的 CPP 文件中,您再次定义了 Rectangle 构造函数。它在抱怨重复。

你的头文件应该只包含声明:

Rectangle(double length, double width);
  1. 错误:'Rectangle' 的构造函数必须显式初始化没有默认构造函数的基 class 'Shape'

这个错误不应该存在,而且它不在我的机器中 (GCC 4.9.2)

  1. 错误:重新定义 'Rectangle'

在你的 Rectangle.hpp 中,你已经定义了 class Rectangle 的构造函数,你只需要声明它

Rectangle(double length,double width)