Моя проблема:
Получил два классы, класс 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.