2014-10-18 3 views
0

в .h:Ошибка: неполный тип не допускается

typedef struct token_t TOKEN; 

в .c:

#include "token.h" 

struct token_t 
{ 
    char* start; 
    int length; 
    int type; 
}; 

в main.c:

#include "token.h" 

int main() 
{ 
    TOKEN* tokens; // here: ok 
    TOKEN token; // here: Error: incomplete type is not allowed 
    // ... 
} 

Ошибка, которую я получаю на последней строке:

Error: incomplete type is not allowed

Что случилось?

+0

выкладывают аргументы, с которыми вы компилируете – danish

ответ

2

Вы должны переместить определение struct в файл заголовок:

/* token.h */ 

struct token_t 
{ 
    char* start; 
    int length; 
    int type; 
}; 
+0

Хм. Я думал, что я должен скрыть реализацию структуры ... – Fabricio

+1

@Fabricio: вы можете скрыть его, если используете непрозрачные указатели, как вы видели. –

+1

Он должен быть видимым в точке, где вы создаете экземпляр структуры. В противном случае компилятор не может знать его размер, его поля и т. Д. – NPE

1

В основном модуле нет определения структуры. Вы должны включить его в заголовке, компилятор не знает, сколько памяти выделить для этого определения

TOKEN token; 

, потому что размер структуры неизвестен. Тип с неизвестным размером является неполным.

Например, вы могли бы написать в заголовке

typedef struct token_t 
{ 
    char* start; 
    int length; 
    int type; 
} TOKEN; 
Смежные вопросы