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

 


Dernière réponse
Sujet : [c++] include qui boucle, comment je fait ???
Ace17

*Syl* a écrit a écrit :

 
#ifndef MONFICHIER_H  




 
Oulalala! Je suis impardonnable!! Désolé pour cette erreur grossiere!  :)


Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
Ace17

*Syl* a écrit a écrit :

 
#ifndef MONFICHIER_H  




 
Oulalala! Je suis impardonnable!! Désolé pour cette erreur grossiere!  :)

*syl*

Ace17 a écrit a écrit :

Est-ce que tu mets des directives pour prévenir l'inclusion multiple?
 
#ifdef MONFICHIER_H
#define MONFICHIER_H
 
// contenu du header
 
#endif  




#ifndef MONFICHIER_H

fucky_fuck Ah ça y est j'ai compris...
Merci beaucoup, là vous me sauvez la vie...
LeGreg

Fucky_Fuck a écrit a écrit :

 
alors dans bot.h , je n'inclus pas weapon, et je met à la place :
class weapon;
quand je compile, ça marche, mais si j'essaie de faire
weapon * = new weapon [2];
il me dit qu'il trouve pas le constructeur... alors que j'ai vérifié, weapon possède bien un constructeur par défaut...




 
weapon est une classe vide tant que tu ne l'as
pas defini en entier! (avec ses membres)
C'est donc logique que tu ne puisses pas appeler le constructeur.
 
Mettre 'class weapon;' dans bot.h
n'exclut pas d'inclure le header necessaire
dans ton bot.cpp
C'est pour ca qu'on separe declaration
et implantation: tu n'as pas besoin d'inclure
les cpp par contre, les .h doivent bien
etre inclus quelque part.
 
De plus dans la phase de compilation considere
chaque .cpp comme un module a part entiere
une compilation d'un .cpp n'influe pas sur  
la compilation d'un autre .cpp.
C'est lors de l'edition des liens que la reunion
se fera. Ce qui veut dire qu'un .cpp ne peut se contenter
d'une definition incomplete.
 
A+
LEGREG

 

[jfdsdjhfuetppo]--Message édité par legreg--[/jfdsdjhfuetppo]

youdontcare une solution est de ne déclarer qu'un pointeur dans le .h et de faire l'include dans le .cpp (ou .c)
 
eg la class otherClass utilise la class myFile, et la classe myFile utilise la classe otherClass :
 
// myFile.h :
 
class otherClass;
 
class myFile
{
  myFile();
  otherClass* myOtherClass;
}
 
// myFile.cpp :
 
#include "otherClass.h";
 
myFile::myFile()
{
   myOtherClass = otherClass;
}
 
//
 
je file l'exemple en c++, c'est le même principe en C.
 
il est également possible que ce soit un problème de design.
fucky_fuck oui,oui, j'avais oublier de le préciser...
en plus avec vc++ 6, c'est facile, y'a la macro oneTimeInclude...
Non,merci mais c'est pas ça, une autre idée ?
bjone je suis d'accord avec le monsieur.
Ace17 Est-ce que tu mets des directives pour prévenir l'inclusion multiple?
 
#ifdef MONFICHIER_H
#define MONFICHIER_H
 
// contenu du header
 
#endif
fucky_fuck Bon alors voilà, j'ai un fichier bot.h qui inclut weapon.h qui inclut BulletManager.h qui inclut lui même une classe dérivée de bot.h... ce qui nous fait une belle boucle, et VC++ 6 n'arrive pas à s'en dépétrer...
 
Alors j'avais penser faire une super-classe bot, avec des fonctions virtuelles et mettre ça dans BulletManager, comme ça pas de boucle...
 
Mais bon, je pensait qu'on pouvait faire mieux, et mon prof d'info m'a dit de déclarer la classe et les prototypes avant...
 
alors dans bot.h , je n'inclus pas weapon, et je met à la place :
class weapon;
 
quand je compile, ça marche, mais si j'essaie de faire
weapon * = new weapon [2];
 
il me dit qu'il trouve pas le constructeur... alors que j'ai vérifié, weapon possède bien un constructeur par défaut...
 
bon alors je me dit, pas grave je vais mettre le prototype comme a dit le prof, comme ça il le trouvera, ce qui nous donne :
 
class weapon;
weapon::weapon();
 
mais là, il met : use of undefined class weapon...
 
bon je commence à croire, que je faire mon coup de la super-classe, mais je tente ici au cas ou vous auriez une idée...
 
Je tiens à préciser qu'il s'agit d'un cas de boucle et pas juste de deux fichiers comme ça...
 
une idée siouplait...

Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)