0

Облик Заголовочный файлC++ наследование/переопределение ошибка

ОШИБКА: Конструктор «Прямоугольник» должен явно инициализировать базовый класс «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 */ 

Облик каст файла

ОШИБКА: Переопределение 'Прямоугольник'

#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; 
} 

базового класс заголовок файл

#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 */ 

Базовых файл касты Класса

#include "shape.hpp" 

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

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

Я сделал еще один класс «Круг» с такой же планировкой, как прямоугольник и не получил какие-либо ошибки, эти ошибки появляются только в прямоугольнике класс .. Я застрял и понятия не имею, почему.

+0

У вас есть два определения 'Rectangle' конструктора –

+0

Вам также не нужна shape.hpp в вашем прямоугольнике.cpp, поскольку вы уже включили его в rectangle.hpp. И у вас есть rectangle.hpp дважды. –

ответ

1

В файле заголовка вы определяете конструктор Rectangle с пустым телом {}.

В файле CPP вы определяете конструктор Rectangle. Он жалуется на дублирование.

Ваш заголовочный файл должен содержать только заявление:

Rectangle(double length, double width); 
0
  1. ОШИБКА: Конструктор «Прямоугольник» должен явно инициализировать базовый класс «Shape», который не имеет конструктор по умолчанию

эта ошибка не должна существовать, и она отсутствует в моей машине (GCC 4.9.2)

  1. ER ROR: Переопределение «Прямоугольник»

В вашем Rectangle.hpp, вы должны были определить конструктор класса Rectangle, вам нужно просто объявить его

Rectangle(double length,double width)