Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1375 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Héritage....

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Héritage....

n°1187391
greeeg
Posté le 29-08-2005 à 20:00:27  profilanswer
 

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 ?  :pt1cable:  
Ma question : pourquoi cette erreur ? Si je supprime de main.cpp un des deux include "AlgoA.h" ou "AlgoB.h", alors ce marche.

mood
Publicité
Posté le 29-08-2005 à 20:00:27  profilanswer
 

n°1187401
Joel F
Real men use unique_ptr
Posté le 29-08-2005 à 20:24:17  profilanswer
 

as tu mis des include guards dans tes .h ??

n°1187435
greeeg
Posté le 29-08-2005 à 22:41:11  profilanswer
 

peux tu développer ? ... je viens de Java moi :)

n°1187442
matafan
Posté le 29-08-2005 à 22:45:37  profilanswer
 

#ifndef ALGOA_H
#define ALGOA_H
 
/* Tout va la */
 
#endif

n°1187477
Taz
bisounours-codeur
Posté le 30-08-2005 à 02:00:35  profilanswer
 

c'est une blague ?

n°1187484
blastman
just me !
Posté le 30-08-2005 à 03:35:36  profilanswer
 

Taz a écrit :

c'est une blague ?


 
je crois que oui


---------------
http://www.blastmanu.info
n°1187983
sharky01
Posté le 30-08-2005 à 17:02:25  profilanswer
 

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  :)

n°1187996
Taz
bisounours-codeur
Posté le 30-08-2005 à 17:07:26  profilanswer
 

sharky01 a écrit :


#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  :)


tu sors toi ...

n°1188061
_p1c0_
Posté le 30-08-2005 à 17:54:04  profilanswer
 

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...  

n°1188115
Taz
bisounours-codeur
Posté le 30-08-2005 à 18:41:41  profilanswer
 

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 !

mood
Publicité
Posté le 30-08-2005 à 18:41:41  profilanswer
 

n°1188142
sharky01
Posté le 30-08-2005 à 19:00:48  profilanswer
 

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  

n°1188144
matafan
Posté le 30-08-2005 à 19:01:32  profilanswer
 

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 ?
 
H_TAZHFR_STACK_1125420015
 
ça c'est solide !


Tout ca pour ca :pfff:

n°1188161
Taz
bisounours-codeur
Posté le 30-08-2005 à 19:19:45  profilanswer
 

ç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
 
...


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Héritage....

 

Sujets relatifs
Surchage, héritage et polymorphismetemplates et héritage
heritage de classesheritage - [résolu !]
[CSS] héritagePython for .NET et héritage
Delphi - Heritage et TForm[C++]Héritage de templates, g++ aime pas :(
HéritageHistoire d'heritage.
Plus de sujets relatifs à : Héritage....


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR