Приветствую.
Имеется следующая ситуация (точнее, её упрощённый вариант, чтобы проблему можно было увидеть на минимальном примере):
Есть два заголовочных файла -- "exception.h" и "filesystem.h". Первый содержит определение базового класса исключений, используемых в проекте, а второй -- функции для различного взаимодействия с FS, а также определение класса исключений, наследуемого от того самого базового класса из "exception.h". "exception.h" же, в свою очередь, для реализации базового класса исключений нужно несколько функций из "filesystem.h".
Выглядит это всё примерно следующим образом:
// main.cpp
#include "exception.h"
int main() {}
// exception.h
#ifndef EXCEPTION_H
#define EXCEPTION_H
#include "filesystem.h"
class exception {};
#endif // !EXCEPTION_H
// filesystem.h
#ifndef FILESYSTEM_H
#define FILESYSTEM_H
#include "exception.h"
class filesystem_exception : public exception {};
inline
void foo() {}
#endif // !FILESYSTEM_H
Собственно, несложно заметить, что в таком случае мы имеем дело с рекурсией, в результате чего получаем вполне резонную ошибку компиляции:
error C2504: 'exception' : base class undefined
Как бы Вы исправили подобную ситуацию? Добавление необходимых в "exception.h" функций из заголовочного файла "filesystem.h" лишь успокоит компилятор, однако добавит дублирование кода.