Скажите, что у нас есть два класса:
// Object.hpp
class Object
{
Handler* h;
Object();
void method();
};
// Object.cpp
Object::Object()
{
h = new Handler();
}
// Handler.hpp
class Handler
{
void update(Object*);
};
// Handler.cpp
void Handler::update(Object* o)
{
o->method();
}
Как связать четыре файла без ошибки включения? Я перепробовал все способы, которые мог придумать и найти в Интернете.
Добавление #include
в оба файла приведет к этой ошибке:
Handler.hpp: error: ‘Object’ has not been declared
update(Object*);
^
Если я добавить предварительное объявление объекта в обработчик, я получаю это:
Object.hpp: error: ‘Handler’ does not name a type
Handler handler
Включение объекта в Handler.hpp и прямое объявление обработчика в Object.hpp дает это:
Object.hpp: error: field ‘h’ has incomplete type ‘Handler’
Handler handler;
^
Между тем, включая обработчик в Object.hpp прямое объявление объекта в Handler.hpp дает следующее:
Handler.cpp: error: invalid use of incomplete type ‘class Object’
o->method();
^
Кажется, я не могу понять, как включить файлы друг в друга. Эта структура основана на шаблоне развязки компонентов из паттернов программирования игр Роберта Нистрома . Любая помощь приветствуется. Спасибо