Ошибка такая (из вашего комментария):
У меня был #include "parser.h" в catalog.h. Я удалил его, и теперь он компилируется нормально ...
Если предположить, что #include "parser.h"
было до typedef в catalog.h
, и у вас есть исходный файл, который включает catalog.h
до parser.h
, то в то время, когда компилятор включает parser.h
, typedef недоступен еще. Вероятно, лучше переставить содержимое заголовочных файлов, чтобы у вас не было циклической зависимости.
Если это не вариант, вы можете убедиться, что любые исходные файлы, содержащие эти два файла, включают parser.h
сначала (или только).