9
votes

Dépendance cyclique entre les fichiers d'en-tête

J'essaie de mettre en œuvre une structure de type arbre avec deux classes: arborescence et noeud . Le problème est que de chaque classe, je veux appeler une fonction de l'autre classe, de sorte que les déclarations avant simples ne suffisent pas.

Voyons un exemple:

arbre.h: xxx

nœud.h: xxx

arborescence appelante: < / strong> xxx

Ceci est juste un exemple simple pour illustrer le problème. Donc, ce que je veux appeler une fonction de arbores à partir d'un objet objet .

Mise à jour # 1: merci pour le réponses. J'ai essayé de résoudre le problème comme dans Java, c'est-à-dire à l'aide d'un seul fichier par classe. Il semble que je devrai commencer à séparer. CPPP et .h fichiers ...

Mise à jour # 2: ci-dessous, après les astuces, j'ai également contemplé la solution complète. Merci, problème résolu.


0 commentaires

4 Réponses :


5
votes

Dans les en-têtes, renvoyer les fonctions de membre:

#include "Tree.h"
#include "Node.h"

Node::Node(Tree * tree, int id) : tree_(tree), id_(id)
{
  tree_->incCnt();
}

Node::~Node() 
{
  tree_->decCnt();
}

etc


0 commentaires

0
votes

Pouvez-vous, mais les corps constructeur / destructeur dans un fichier .cxx? Vous pouvez inclure arborescent.


0 commentaires

1
votes

La définition de arborescence nécessite la définition de noeud mais pas l'inverse de sorte que votre déclaration avant est correcte.

Tout ce que vous avez à faire est supprimé la définition de toutes les fonctions nécessitant une définition complète de arborescence dans le nœud de la classe et les implémenter dans un .CPP fichier dans lequel des définitions complètes des deux classes sont dans la portée.


0 commentaires

2
votes

Suivre les astuces, voici la solution complète.

arbre.h: xxx

arbre.cpp: < / strong> xxx


nœud.h: xxx

Nœud.cpp: xxx


0 commentaires