Теоретически g ++ должен скомпилировать класс перед тем, который его включает.
g ++ должен иметь возможность компилировать ваши исходные файлы в любом порядке.Порядок, в котором включает заголовки в ваш источник, устанавливается в порядке ваших операторов #include
.
Наиболее вероятный случай - имя класса room
, а не Room
.Следующим, вероятно, является то, что имя - это нечто другое, кроме Room
.Менее вероятно, что оно находится в пространстве имен, отличном от корневого пространства имен.
РЕДАКТИРОВАТЬ: Хорошо, если это не так, убедитесь, что включается room.h
, который является вашим room.h
, а не некоторыедругое room.h
.Ничего подобного редактированию неправильной копии файла, чтобы потратить впустую ваш день.
РЕДАКТИРОВАТЬ 2: Я предполагаю, что ваши заголовочные файлы имеют обычную структуру include-Once:
#ifndef schedule_h
#define schedule_h
// header file code goes here.
#endif
...и что вы опустите его для краткости.
РЕДАКТИРОВАТЬ 3: Я просто скопировал код, который вы дали в новый каталог, и создал фиктивный файл day.h
с содержанием:
typedef int Day;
Затем я использовал g++ -c -o schedule.o schedule.cpp
для его сборки и не получил ошибок.Поэтому ошибка - это то, чего мы не видим.
Редактировать 4: Хорошо, время проверки работоспособности.Посмотрите на верхнюю часть room.h
и убедитесь, что там написано
#ifndef room_h
, а не
#ifdef room_h