Héritage.... - C++ - Programmation
Marsh Posté le 30-08-2005 à 03:35:36
ReplyMarsh Posté le 30-08-2005 à 17:02:25
Bon juste pour éclairer ta lanterne Greeeg je vais expliciter un peu ce que t'on dis les autres.
si tu fais ce que tu as dis ton compilateur lorsque il compile le fichier principal qui contient le main se sert des includes pour trouver les fonctions/objets/méthodes... que tu utilise et qui ne sont pas défini sur place.
Pour se faire il va regarder à l'interieur de tes fichiers AlgoA.h et AlgoB.h et il fait pareil à l'interieur de ceux ci, si bien que quand il passe dans AlgoA.h il trouve #include AlgoGen.h et il va regarder ce qu'il y a dedans puis quand il passe dans AlgoB.h il retrouve #include AlgoGen.h il y retourne et donc il crois trouver une nouvelle définition de ce qu'il avait vu précedement... d'ou ton l'erreur qu'il te sort.
Comme te l'a indiqué Matafan pour te prémunir de cette erreur tu encadre le contenu de ton .h par :
#ifndef NOM_FICHIER_H
#define NOM_FICHIER_H
/*tes includes, Ton code...*/
#endif
comme ca le compilateur ne définira qu'une fois pour toute le contenu d'un .h même si il est inclus dans un million de fichiers
Marsh Posté le 30-08-2005 à 17:07:26
sharky01 a écrit : |
tu sors toi ...
Marsh Posté le 30-08-2005 à 17:54:04
Taz a écrit : tu sors toi ... |
tu peux expliquer Taz??
Moi j'aurais juste mis les prototypes des fonctions dans le fichier, pas le code...
Marsh Posté le 30-08-2005 à 18:41:41
t'as une idée du nombre impressionant de gens qui ont un fichier stack.h ? et du nombre d'idiots qui ont encadrés ça par un STACK_H ?
H_TAZHFR_STACK_1125420015
ça c'est solide !
Marsh Posté le 30-08-2005 à 19:00:48
Oui heureusement tu n'es pas obligé de mettre le nom de ton fichier avec les directive #ifndef ... tu mets ce que tu veux on s'en fout. Là j'ai mis ca pour l'exemple j'aurais put mettre directement ALGOA_H comme Matafan ou TOTO_H. Et par code je me suis mal exprimé je voulais bien evidement parler des protos, definitions d'objets ... Bref ce que l'on mets généralement dans un .h
Marsh Posté le 30-08-2005 à 19:01:32
Taz a écrit : t'as une idée du nombre impressionant de gens qui ont un fichier stack.h ? et du nombre d'idiots qui ont encadrés ça par un STACK_H ? |
Tout ca pour ca
Marsh Posté le 30-08-2005 à 19:19:45
ça le vaut. Faut vraiment pas y voir plus loin que le bout de son nez pour écrire des
#define STACK_H
#define N 100
...
Marsh Posté le 29-08-2005 à 20:00:27
Bonsoir,
Voilà, je découvre l'héritage en C++ et j'ai la situation suivante :
Une classe "AlgoGen"
Une classe "AlgoA" qui hérite de "AlgoGen"
Une classe "AlgoB" qui hérite de "AlgoGen"
Dans le fichier qui contient la méthode main, j'ai donc #include"AlgoA.h" et #include "AlgoB.h"
Dans les AlgoA.h et AlgoB.h j'ai donc #include"AlgoGen.h".
Or à la compilation il me dit : AlgoGen.h:11: error: redefinition of 'class AlgoGen' ce qui correspond à la ligne :
class Algorithme {
Vous m'avez compris ?
Ma question : pourquoi cette erreur ? Si je supprime de main.cpp un des deux include "AlgoA.h" ou "AlgoB.h", alors ce marche.