Bonjour,
J'ai un problème en C++, l'exemple parle mieux que les mots :
main.hpp
#if not defined MAIN_HPP
#define MAIN_HPP
#include "truc.hpp"
class Main
{
protected:
Truc m_truc;
};
#endif
truc.hpp
#if not defined TRUC_HPP
#define TRUC_HPP
#include "main.hpp"
class Truc
{
protected:
Main m_main;
};
#endif
Et, bien sur, le fichier main.hpp est inclus dans main.cpp.
L'erreur est la suivante :
truc.hpp:9: erreur: «Main» does not name a type
Je ne sais pas comment résoudre ce cercle vicieux... pouvez vous ?
Merci d'avance !
PS: Une solution serait d'employer un pointeur void dans l'une des classe (la classe Truc par exemple), l'initialiser grâce à this dans la classe Main puis de le caster à chaque utilisation... mais je voudrais savoir si il n'y aurait pas une méthode plus simple.
En regardant ton code, tu essaies de mettre "main" dans "truc", qui lui meme contient "main"
C'est infini : un peu comme des poupées russes qui iraient jusqu'a l'infini, tu vois ?
par contre, ce que tu peux faire, c'est un POINTEUR vers l'autre classe, et des pointeurs dans les 2 sens, simplement en faisant une déclaration auiparavant.
class truc; // déclaration
class machin
{
truc* t;
};
class truc
{
machin* m;
}
Je pense tout de meme que tu as un probleme de conception.
Dans la "réalité", j'utilise bien des pointeurs, c'était juste pour "simplifier" l'exemple. Mais, je reconnais que cet exemple est irréalisable.
Mon but est en fait de modifier les propriétés d'une wxFrame depuis un wxPanel (son fils) dans wxWidgets.
Je ne savais pas que l'on pouvait pré-définir une classe. En tout cas ça marche.
Merci !
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html