Проблем:
- нет нескольких защит включения
- циклического включения
использования
- типа до его декларации, вызванное циклическим включением
Вашего foo.h обрабатываемое препроцессором C выглядит как бесконечная пустая последовательность строк.
С нескольких foo.h защиты включения предобработан в:
> cpp foo.h
class bar{ // preprocessed from #include "bar.h"
public:
static const int MY_DEFINE = 10;
foo::my_enum_type var;
bar() {};
~bar() {};
};
// end of #include "bar.h"
class foo{
public:
enum my_enum_type { ONE, TWO, THREE };
foo();
~foo() {}
};
Это, очевидно, не является допустимым C++ кода - Foo используются в барах тела без предварительного объявления. C++, в отличие от Java, требует, чтобы типы были объявлены перед использованием.
- Используйте множественную защиту включения. В зависимости от вашей платформы это могут быть
#ifndef
макросы или #pragma once
директивы
- Удалить bar.h включение от foo.h.
- Разместить переадресацию там, где это необходимо (в вашем случае
bar
может быть объявлено в foo.h, ваш пример не показывает необходимости в этом).
- Переместите как можно большую реализацию в файлы * .cpp.
Если ситуация не может быть решена с помощью этих рекомендаций, используйте PIMPL idiom.
Короче - просто удалить #include "bar.h"
директиву из foo.h
Это должно работать нормально ... –
Как вы используете классы? У вас еще нет исходного файла. Можете ли вы поделиться тем, как вы используете эти классы? –
Спасибо, ребята, вы заставляете меня понять, что проблема не в синтаксисе, а в том, как я использовал классы. В foo.h было #include "bar.h", я заменил его на декларацию вперед, и теперь все в порядке! –