OVH Cloud OVH Cloud

[debutant] : includes et redefinition de types et fonctions

1 réponse
Avatar
lecyborg
bonjour a tous,

j'ai 2 classes qui importent toutes les 2 un fichier ou je definis plein de
types.
et une autre classe qui importe les 2 premiere classes.
Vous l'aurez compris, j'ai des problemes de redefinitions de types, et je ne
vois pas comment les contourner.

par ailleurs j'ai un peu le meme probleme avec un fichier rempli de
fonctions (de maths notamment) ou la le compilo marque functions has already
have a body

a noter que je programmes sous vc++ 6

merci d'avance pour votre aide.

1 réponse

Avatar
Ambassadeur Kosh
> j'ai 2 classes qui importent toutes les 2 un fichier ou je definis plein


de
types.
et une autre classe qui importe les 2 premiere classes.
Vous l'aurez compris, j'ai des problemes de redefinitions de types, et je


ne
vois pas comment les contourner.



par importe, j'en deduis #include, non ?

#ifndef __NOMUNIQUEPARFICHIER_H
#define __NOMUNIQUEPARFICHIER_H
... source du .h ...
#endif // __NOMUNIQUEPARFICHIER_H

donc, on met autours de chaque fichier .h, on est bien d'accord hein ?

d'apres tes dires , tu n'a pas de ref circulaires. donc ça devrait résoudre.

mais au cas ou j'aurais mal compris :

si class A need class B, et class B need class A, appliquer cette "recette"
:
si les classes ont besoin de copies et non pas de références, tu es mal
barré, et c'est normal, ça n'a pas de sens.
pour les parametres des fonctions, tu auras des embrouilles pour les inline
dans le cas ou tu n'es pas dans les "faveurs" de l'ordre strict induit par
l'écriture du contenu de la classe. donc prototyper.

#ifndef __NOMUNIQUEPARFICHIER_H
#define __NOMUNIQUEPARFICHIER_H

class A ;
class B ;

class A { public : B *ptr ; };
class B { public : A *ptr ; };

#endif // __NOMUNIQUEPARFICHIER_H


petite appartée : c'est un des problemes qui fait pencher le conceptuelistes
et les langageux en faveur du "le C++, c'est vraiment un langage de m....
euuuh de bas niveau". effectivement, en C# ou en Eiffel, il n'y a pas à
résoudre ce genre de problemes : la dépendance n'induit pas un ordre.

par ailleurs j'ai un peu le meme probleme avec un fichier rempli de
fonctions (de maths notamment) ou la le compilo marque functions has


already
have a body



tu as du reecrire une fonction du même nom dans ton code ou qqchose de ce
gout. si c'est un fichier de VS, ca ne peut être que ça. si ces routines
viennent de ta plume, revenir au dessus. sinon, ça peut être autre chose,
mais la je seche.

merci d'avance pour votre aide.



de rien, bon courage.