предварительное объявление и пространства имен (c ++)

Моя проблема:

Получил два классы, класс A и B, поэтому я получил Ah, A.cpp, Bh и B.cpp. A должен знать B, а B должен знать A. Я решил это следующим образом (я не знаю, почему так должно быть ...)

Ah:

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

A.cpp:

#include "A.h"

Bh :

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

B.cpp:

#include "B.h"

Я использовал одно предварительное объявление, и оно работает.

Проблема в том, что оба класса должны находиться в пространстве имен «ui». Или, по крайней мере, я думаю, что это значение:

A.h:

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

class A{ ... 

B.h:

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

class B{ ... 

Это больше не работает. Что мне нужно сделать, чтобы заставить его снова работать с пространством имен и прямым объявлением?

Оба они должны быть в этом пространстве имен. Я работаю с Qt, и строки "namespace ui {" и т. Д. Необходимы. И оба класса должны знать друг друга. Я уже пытался просто сделать это:

namespace ui{
 class A;
 class B;
}

в обоих заголовках, но это не работает ...

Кстати: все файлы заголовков также имеют механизм ifndef.

13
задан Yu Hao 5 January 2015 в 03:33
поделиться