dire que j'ai une classe foo avec un objet de barre de classe en tant que membre
class bar;
4 Réponses :
Autant que je sache, la seule façon réelle de cela consiste à utiliser des pointeurs car ils ne nécessitent pas de définition de classe avant l'unité de traduction (.CPP) auquel cas les deux classes auront été définies correctement. P>
Vous devez déplacer tout l'accès de membre hors de l'en-tête et dans vos fichiers source.
De cette façon, vous pouvez transmettre vos cours dans l'en-tête et les définir à FOO: P> xxx pré>
qui vous permettra de travailler - vous ne pouvez tout simplement pas mettre des définitions qui nécessitent des informations membres dans votre en-tête - déplacez-la au fichier .cpp. Les fichiers .cpp peuvent inclure à la fois FOO.H et BAR.H: P>
// Foo.cpp #include "foo.h" #Include "bar.h" void foo::some_method() { this->m_pbar->do_something(); // Legal, now, since both headers have been included }
Cela semble être la meilleure option pour ce dont j'ai besoin.
Maintenant, comment cette solution fonctionne-t-elle si vos classes codépendantes sont modèles et ne peuvent donc pas être séparées dans des fichiers en-tête et CPP?
Je suppose qu'une façon est de faire des classes d'interface abstrait sans membres. Puis la sous-classe FOO et la barre de ces classes d'interface.
par exemple: p> Ceci casse le cycle des dépendances (à moins que les interfaces elles-mêmes ne dépendent l'une de l'autre, et si c'est le cas, alors ils devraient probablement être déclarés dans le même fichier) p> p>
dans votre exemple, Vous ne pouvez pas avoir de cours qui dépendent directement les uns sur les autres en C ++; Cela ne fonctionne tout simplement pas. Vous devez découpler les classes de telle sorte que cela ne dépend que de l'autre existant, comme dans votre exemple. Les seules choses qui créent une dépendance directe utilisent une classe comme classe de base ou en tant que champ; Toute autre utilisation crée simplement une dépendance indirecte, ce qui n'est généralement pas un problème. P> foo code> dépend de la barre code> (car il contient une barre
réelle code> objet), mais
bar code > Ne dépend pas de
foo code> (puisqu'il contient uniquement un
foo * code>). Maintenant,
BAR code> dépend de sur
FOO code> étant un nom de type, alors bar.h a besoin d'une déclaration en avant du nom:
Classe FOO; code>.
FOO code> dépend de la barre code>, donc foo.h doit contenir
#include "bar.h" code> p> p> p>