2013-11-09 3 views
1

У меня есть файл lexer.c, который должен быть включен в файл .c. Он имеетНеизвестный тип имени в прототипе файла заголовка

int getToken(string *attribute) {}

функции и тот же прототип в lexer.h файл заголовка. Также у меня есть помощник str.c файл для упрощения работы со строками. Он имеет заголовочный файл с декларацией типа строки:

typedef struct { 
    char* str;  //string with \0 at the end 
    int length;  //length of the string 
    int allocated; //allocated memory size 
} string; 

Так, lexer.h включенного из основного файла. Тогда lexer.c начинается с:

#include "str.h" 
#include "lexer.h" 

Как я пониманию, после включения str.h Типу строку видна для lexer.c и lexer.h. Но у меня есть ошибки компиляции в прототипе в заголовочном файле:

./lexer.h:65:14: error: unknown type name 'string' 
int getToken(string *attribute); 
      ^
1 error generated. 

Как я могу использовать этот тип в заголовочном файле?

+0

Проверьте, нет ли каких-либо аргументов # ifdef или других причин, по которым ваш typedef может быть исключен ... и не связан с вашей проблемой, но «у меня есть файл lexer.c, который должен быть включен в другой файл .c» - если это не тип .... не # включить один .c в другой. Иногда это может работать нормально, но как образец, который следует за ним, в конечном итоге вызовет проблемы. – mah

+0

Почему бы вам не сделать это простым, ваши пользовательские объявления в один общий заголовочный файл и включить его в требуемые файлы .c. –

+0

@mah извините за мой стиль письма, я подразумевал включение в другие .c файлы через файл заголовка lexer.h –

ответ

2

Не знаю, какие файлы включают в себя какие. Попробую резюмировать следующим образом:

  • lexer.c включает str.h и lexer.h
  • main.c включает lexer.h

Является ли это правильно? В этом случае main.c не может быть скомпилирован, так как отсутствует определение типа string.

Как lexer.hвсегда требует str.h быть включены, это может быть хорошей идеей, чтобы из #include "str.h" в этот файл заголовка.

+0

да, это верно! спасибо за помощь, в том числе str.h, чтобы main.c решил мою проблему. работает без #include "str.h" в файле заголовка –

+2

@MarkBirger Конечно, он работает. Но это может помочь предотвратить такие вещи, если все заголовочные файлы являются «самодостаточными», т.е. е. работая, не требуя, чтобы включенный включал и необходимые вещи. – glglgl

+0

О, я понимаю, если я включу все «зависимости» в .h-файл, мне не нужно включать str.h в каждый файл. –

Смежные вопросы