erreur: la redéfinition de la classe
Voici mon code:
//in main.cpp
#include "iostream"
#include "circle.cpp"
#include "rectangle.cpp"
#include "shape.cpp"
using namespace std;
int main() {
Shape shapes[10];
for (int i = 0; i < 10; i++){
if (i % 2)
shapes[i] = Circle(5);
else
shapes[i] = Rectangle(10, 10);
cout << shapes[i].getArea();
}
return 0;
}
//in circle.cpp
#include "shape.cpp"
class Circle : public Shape {
private:
int radius;
static const double PI = 3.14159265358979323846;
public:
Circle (int radius) : radius(radius) {}
virtual int getArea() const {
return PI * radius*radius;
};
virtual int setRadius(int radius){
radius = radius;
}
};
//in rectangle.cpp
#include "shape.cpp"
class Rectangle : public Shape {
private:
int width;
int height;
public:
Rectangle(int width, int height) : width(width), height(height){}
virtual int getArea() const {
return width * height;
}
virtual void setWidth(int width){
this->width = width;
}
virtual void setHeigth(int height){
this->height = height;
}
};
//in shape.cpp
class Shape {
public:
virtual int getArea() const = 0;
};
Lors de la compilation, j'obtiens cette erreur:
error: redefinition of 'class Shape'
Comment puis-je résoudre ce problème?
Découvrez "inclure les gardiens" ou
#pragma once
pour les compilateurs qui soutiennent quelque chose comme ça. Il ressemble à l'en-tête peut être inclus plusieurs fois. Et l'ensemble y compris les fichiers cpp... ce n'est normalement pas comment il est fait.OriginalL'auteur Aviv Cohn | 2014-10-03
Vous devez vous connecter pour publier un commentaire.
Vous devez structurer votre code entre .h (en-têtes) et .fichiers cpp (mise en œuvre).
Vous devez inclure les fichiers d'en-tête:
.h
Ne jamais inclure
.cpp
fichiers. (Sauf si vous savez ce que vous faites, et que ce serait dans de très rares cas).Sinon, vous êtes fin de la compilation de plusieurs fois votre classe, et vous obtenez le message d'erreur de votre compilateur vous dit: "la redéfinition de la classe...'
Parce que sinon, vous compiler les classes à plusieurs reprises, et vous obtenez le message d'erreur du compilateur est de vous dire : redefiniton de classe .
Les mauvaises pratiques, les erreurs comme la vôtre, etc. Voir cplusplus.com/forum/general/39618
chaque rpc est une "unité de compilation".
OriginalL'auteur Stephane Rolland
Votre main.cpp inclut les fichiers qui incluent shape.cpp qui finit par être inclus plusieurs fois. Vous pouvez éviter cela en enveloppant vos fichiers inclus avec un chèque de définition:
OriginalL'auteur James Thorpe