У меня есть три класса: TopClass
, который содержит экземпляр указателя BottomClass
. BottomClass
содержит указатель на HelperClass
. HelperClass
сохраняет указатель на TopClass
. Появляется циклическая зависимость, и в HelperClass
.
требуется предварительное объявление.
Все это иллюстрируется следующими фрагментами кода:
#include "BottomLevel.h"
namespace foo
{
class TopLevel
{
private:
BottomLevel* item;
};
}
-
#include "HelperClass.h"
namespace foo
{
class BottomLevel
{
private:
HelperClass* item;
};
}
-
class TopLevel; // forward declaration here
namespace foo
{
class HelperClass
{
public
HelperClass(TopLevel* item);
};
}
Проблема возникает при попытке сделать что-то в файле реализации. Если я #include "TopClass.h"
в файле cpp, я получаю ошибки компиляции, в которых говорится, что "перегруженная функция-член не найдена - используется неопределенный тип 'TopLevel
'" (ОШИБКИ C2511 и C2027).
Тогда, если я не сделаю #include
, у меня все еще останутся ошибки C2027, потому что я пытаюсь использовать объявленный вперед тип.
Я просто знаю, что есть способ исправить это, я уверен, что делал это раньше, но я не могу на всю жизнь вспомнить, что я должен делать. Любая помощь, пожалуйста?