Question basique #include croisés [C++] - C++ - Programmation
Marsh Posté le 11-10-2003 à 17:06:40
tu veux une "Foward Declaration"
class Foo;
class Bar
{
Foo *f;
};
cela est possible, le compilo sait que Foo existe et comme tous les pointeurs ont la même taille, il est capable d'allouer Foo*.
et voilà
Marsh Posté le 11-10-2003 à 17:08:41
Vire tes inlines et claques les dans le .cpp et fait une forward declaration de Bar
Marsh Posté le 11-10-2003 à 17:14:54
Taz a écrit : tu veux une "Foward Declaration" |
C'est la première chose que j'ai essayé (avant de faire ce topic), mais le soucis vient alors de l'appel à la fonction monBar->maMethode, qu'il ne connait pas.
*Syl* a écrit : Vire tes inlines et claques les dans le .cpp et fait une forward declaration de Bar |
Je vais essayer ainsi, merci !
Marsh Posté le 11-10-2003 à 17:34:39
Ca marche en effet beaucoup mieux en définissant les fonctions dans un cpp ! Merci à toi !
Marsh Posté le 16-10-2003 à 19:31:27
il me semble que tu peux déclaré un pointeur vers une classe en forward definition, mais tu ne peux pas utiliser ses méthodes (tu ne les as pas encore déclarées au compilo). Ainsi, en mettant les définitions de tes méthodes dans un .cpp, la définition (pas forward) de la classe a déjà été lu par le compilo, donc il en connait les méthodes.
Marsh Posté le 11-10-2003 à 16:53:27
Bonjour tout le monde,
Jusqu'à présent, je m'en sortais relativement facilement avec les #ifndef et les forward déclarations, mais j'arrive maintenant à un cas de figure qui m'embête un peu, et je me casse les dents dessus depuis qqs heures maintenant :|
Voici la situation que je résume à l'aide de 2 fichiers, foobar.h et main.cpp.
Fichier foobar.h
Fichier main.cpp
Ce n'est pas dans le fichier main.cpp que se situe le problème, mais je vous l'ai mis si vous vouliez faire l'essai chez vous. Voici le résultat de la compilation :
Résultat de la compilation
$> g++ -Wall -pedantic main.cpp
In file included from main.cpp:1:
foobar.h:7: syntax error before `*' token
foobar.h: In member function `void Foo::maMethode()':
foobar.h:8: `monBar' undeclared (first use this function)
foobar.h:8: (Each undeclared identifier is reported only once for each function
it appears in.)
main.cpp: In function `int main()':
main.cpp:7: `class Foo' has no member named `monBar'
$>
J'ai effectué une recherche, mais je n'ai pas trouvé de topics faisant référence à ce cas de fugure particulier (appel d'une fonction membre d'une classe dans une classe, à travers un pointeur). J'imagine qu'il s'agit d'un problème pourtant classique maintes et maintes fois débatu, je m'escuse par avance de la redondance.
Si quelqu'un à le courage de me donner un petit coup de main, ca serait sympa !
Merci, @+
Message édité par Evadream -jbd- le 11-10-2003 à 17:33:21