Il faut que cette pratique soit g�n�ralis�e pour qu'on commence � mieux voir ce qui se passe.
Et s'assurer de ne plus avoir d'inclusions cycliques.
Il faut que cette pratique soit g�n�ralis�e pour qu'on commence � mieux voir ce qui se passe.
Et s'assurer de ne plus avoir d'inclusions cycliques.
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Le probl�me des inclusions cycliques, c'est qu'avec les gardes telles que tu les as d�finis, tu as toujours un header dont le contenu est d�fini avant l'autre.
Exemple:
Code C++ : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13 //A.h #ifndef H_A #define H_A //Avant B.h #include "B.h" //Apres B.h class CA { B* pb; }; #endifSi je compile un fichier qui inclut A.h (on va dire: a.cpp), le pr�processeur donnera un truc de ce genre:
Code C++ : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13 //B.h #ifndef H_B #define H_B //Avant A.h #include "A.h" //Apres A.h class CB { A* pa; }; #endif
Code C++ : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 //A.h #define H_A //Avant B.h //B.h #define H_B //Avant A.h //A.h //Apres A.h class CB { CA *pa; //ERREUR: CA inconnu }; //Apres B.h class CA { CB *pb; };
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Avant d'avoir mis des gardes j'avais des
et l'erreur �tait pr�sente.
Code : S�lectionner tout - Visualiser dans une fen�tre � part #pragma once
Ce qui m'am�ne � la question : y a-t-il une diff�rence entre les 2 m�thodes ?
� propos du probl�me tel que je te le montre? je ne crois pas.
Pour des trucs plus complexes, il peut y avoir une diff�rence.
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Est ce que par hasard (enfin par malchance plut�t), tes gardes n'entreraient pas en conflit avec d'autres gardes (syst�me, autre projet, librairie tierces, ...)
Raymond
Vous souhaitez participer � la rubrique R�seaux ? Contactez-moi
CafuroCafuro est un outil SNMP dont le but est d'aider les administrateurs syst�me et r�seau � configurer leurs �quipements SNMP r�seau.
e-verbeUn logiciel de conjugaison des verbes de la langue fran�aise.
Ma page personnelle sur DVP.
Bonsoir,
Si tu as vraiment besoin d'aide tu dois d�voiler une partie de ton code
1 i�re le header qui contient la ligne de l'erreur (tout le header)
2 i�me le header qui contient la d�claration de ta CNoteDlg (tout le header)
3 i�me le cpp qui provoque l'erreur de compilation et qui inclut ces headers. ( juste la partie des includes)
En reprenant l'exemple de Medinoc, la solution contre les inclusions circulaires est la d�clarations forward :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11 //A.h #ifndef H_A #define H_A class B; class CA { B* pb; }; #end ifIl reste alors � inclure A.h et B.h dans les .cpp
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11 //B.h #ifndef H_B #define H_B class A; class CB { A* pa; }; #end if
A propos de la diff�rence entre #pragma once et les #define..., il me semble que le probl�me viens du faite que #pragma once n'est pas compatible avec tous les compilateurs (http://en.wikipedia.org/wiki/Pragma_once).
J'ai r�alis� les d�clarations forward au niveau de la classe qui inclue CNoteDlg et le probl�me semble �tre r�solu.
Merci � tous pour le soutien.
Partager