Разрешение зависимостей при включении заголовочных файлов в C++
От: FrozenHeart  
Дата: 24.02.14 12:03
Оценка:
Приветствую.

Имеется следующая ситуация (точнее, её упрощённый вариант, чтобы проблему можно было увидеть на минимальном примере):

Есть два заголовочных файла -- "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" лишь успокоит компилятор, однако добавит дублирование кода.
avalon/1.0.434
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.