Declaration cyclique et fichiers .h > JE VAIS DEVENIR FOU [C] - C++ - Programmation
Marsh Posté le 14-02-2003 à 09:22:24
Dans tes *.h (par exemple toto.h), tu déclare des variables:
Code :
|
EDIT: je vais me reveiller bientôt et je fermera les balises à fur et à mesure ...
EDIT2: je vais me reveiller tout court et je vais lire les messages jusqu'à bout ...
Marsh Posté le 15-02-2003 à 01:07:56
Effectivement, chaque header a besoin des deux typedef, alors qu'ils ne seront dispo qu'àprès les deux inclusions.
Met les deux typedef dans un header commun, inclus par Unit2.h et Unit3.h.
typedefs.h
Code :
|
Marsh Posté le 15-02-2003 à 11:11:36
En fait, je voulais dire que au lieu de faire :
Code :
|
Il faut faire :
Code :
|
Marsh Posté le 15-02-2003 à 12:23:06
tu peux séparer les données du code.
mydata.h :
#include "data2.h"
#include "data3.h"
data2.h
typedef int int2;
data3.h
typedef int int3;
tu inclus mydata là ou tu en as besoin.
vu l'exemple que tu donnes, on ne peut pas se rendre compte de grand chose : c'est peut-être un problème de design.
Marsh Posté le 16-02-2003 à 01:08:28
Par contre c'est juste ton exemple
ou je n'ai pas compris l'intérêt de faire
typedef int int2?
bah les typedefs ca pue.
on peut pas faire de forward declaration
de typedef puisque c'est juste un alias
pour le compilateur et pas une nouvelle
classe (int2 == int3 strictement).
Si c'est pour de la type-safety il vaut peut-être mieux
et doit être possible d'utiliser un type enum ou un wrapper de classe entière (quelqu'un a un template qui fait ça proprement ?).
LeGreg
edit: pour la derniere solution c'est du C++ donc desole je n'avais pas vu que ca ne s'adressait qu'aux gens qui programmaient en C..
Marsh Posté le 17-02-2003 à 07:16:24
legreg a écrit : on peut pas faire de forward declaration de typedef puisque c'est juste un alias |
J'ai récemment vu ça:
Code :
|
Et c'est accepté par mon compilateur.
standard ?
Marsh Posté le 17-02-2003 à 12:51:24
Musaran a écrit :
|
je ne parle pas de ca.
Exemple :
Code :
|
si je fais dans un .h :
Code :
|
alors ca ne va pas marcher parce que integerList n'est pas un type ni une classe.
La raison ? je crois que c'est pour des incohérences dans le système de nommage qu'aurait apportées une telle écriture.
LeGreg
Marsh Posté le 18-02-2003 à 07:51:11
Je comprends toujours pas...
Ce que tu dis n'a pas de sens ?
Code :
|
Pas compatible...
Marsh Posté le 18-02-2003 à 08:16:59
justement je te dis que ce n'est pas compatible
Ca y est?
LeGreg
Marsh Posté le 20-02-2003 à 09:27:40
Ça ne marche pas parce que tu essayes d'utiliser le même nom pour deux type différents: list<int> et une nouvelle classe.
Qu'est-ce que ce serait censé faire ?
typedef permet des déclarations anticipées, et on ne peut justement pas e nchanger le sen saprès coup.
Marsh Posté le 14-02-2003 à 02:20:31
Putain j'y arriverai jamais
Donc soit j'ai pas compris, soit c autre chose
Cette fois je vous colle le test que j'ai fait :
Unit1 (classique...)
Unit2.cpp
Unit2.h
Unit3.cpp
Unit3.h
Donc voila c un test tout simple, avec un cas tout simple de dependance cyclique... et maintenant > COMMENT ON FAIT ?
Parce qu'actuellement : Erreur a la compil de l'unit3.h "int2" type inconnu