transmettre la déclaration et les espaces de noms (c ++)

Mon Problème:

Ai deux classes, la classe A et de B, donc je me suis A. h et A.cpp et B. h et B.cpp.
Un besoin de savoir B et B doit savoir A. je l'ai résolu de la façon suivante (je ne sais pas pourquoi il doit en être ainsi...)

A. h:

#include "B.h"
class A{ ... 

A.cpp:

#include "A.h"

B. h:

#include "A.h"
class A; //forward declaration
class B { ... 

B.cpp:

#include "B.h"

J'ai utilisé une à l'avant de la déclaration, et cela fonctionne.

Le Problème, c'est que les deux classes ont besoin d'être dans l'espace de noms "interface utilisateur". Ou, au moins, je pense que c'est le sens:

A. h:

#include "B.h"
namespace ui{
  class A;
}

class A{ ... 

B. h:

#include "A.h"
namespace ui{
  class B;
}

class B{ ... 

Cela ne fonctionne pas plus. Que dois-je faire maintenant pour le faire fonctionner à nouveau avec de l'espace de noms et la déclaration anticipée?

Les deux doivent être dans cet espace de noms. Je travaille avec Qt et les lignes "namespace ui{" etc. sont nécessaires. Et les deux classes ont besoin de savoir les uns des autres.
J'ai déjà essayé juste pour faire ceci:

namespace ui{
 class A;
 class B;
}

dans les deux-têtes, mais cela ne fonctionne pas...

Btw: Tous les en-Tête des Fichiers aussi eu la "ifndef"-mécanisme.

source d'informationauteur Obs | 2011-06-22