Не могу разобраться с циклическими инклюдами.
Есть файл a.h, в нем находится определение класса A:
// a.h
#ifndef A_H
#define A_H
#include <c.h>
enum class Props {*};
class A
{
***
private:
C var;
}
#endif // A_H
А также файлы b.h и c.h с определениями соответствующих классов:
// b.h
#ifndef B_H
#define B_H
#include "a.h"
class B
{
prublic:
void foo(Props p); // 'Props' has not been declared
}
#endif // B_H
// c.h
#ifndef C_H
#define C_H
#include "b.h"
class C : public B
{
***
}
#endif // C_H
Объясните пожалуйста как это работает и как этого избегать. Раньше сталкивался с этим. Решалось предварительным объявлением (forward declaration) классов. Но в этом случае не очень понимаю что делать, да и хотелось бы наконец разобраться.
Чтобы минимизировать зависимости в заголовках можно отделить интерфейс от реализации, внутренней структуры.
Т.е. в заголовках только интерфейс (функции). Все закрытые члены либо в классе-наследнике интерфейса, либо в структуре, которая является собственно реализацией, а в интерфейсе только объявлена в приватной части.
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости