2015-04-01 2 views
0

Если я получил это заявление в моем файле заголовок (.h)C/исходный файл - перечисление ЬурейеГо

typedef enum {START, END, STARTEMD, COMMENTS, DIRECTIVE} BalType; 
typedef struct bal * Bal; 

Когда я пришел в моем .c (исходный файл), я хочу создать-структуру bal и включить в него атрибут Baltype, чтобы потом узнать тип bal. Я определил мою-структуру, как это:

struct bal { 
    enum Baltype type; 
    char * name; 
    char * attrOne; 
    char * attrTwo; 
}; 

Но я получаю сообщение об ошибке: Ошибка: тип поля имеет неполный тип. Я предполагаю, что ошибка указана в моем перечислении typedef.

Спасибо.

+0

я уже включают в себя bal.h в моем файле bal.c – Thapipo

ответ

3

Прежде всего, typedef создает «первоклассный» тип, где вы не должны говорить, что это перечисление больше при его использовании. Правильный путь вдоль линий:

typedef enum {A, B} C; 
C c;     // not enum C c. 

Во-вторых, рассмотрим следующие два сегмента:

typedef enum {A, B} C; 
enum C D; 

первый создает немаркированный перечисления, а также создает псевдоним типа C для Это. Второй создает отдельную помеченную перечисление (помечен C) и не создает псевдонима типа (он также объявляет переменную D, но это не важно для наших соображений здесь).

Теперь вам может быть интересно, что это имеет отношение к вашему вопросу, но если мы примем имя, которое вы использовали при создании типа, и разместите под ним имя, которое вы использовали в struct, я бы надеялся, что это станет очевидным :

BalType 
Baltype 
^
    An extra clue :-) 

Так что упрощение вашей проблемы, таким образом, очень похож на ABCD код, который я дал выше:

typedef enum {START, END} BalType; 
enum Baltype type; 

Это на самом деле сочетание этих двух вещей, дающих вам печаль. Вам кажется, чтобы создать полный перечислимый тип, и вы. Тем не менее, вы создаете совершенно разные (и неполные, так как они не имеют тела) перечисления. Будучи неполным, его нельзя использовать так, как вам нужно.

Чтобы решить эту проблему, в последней строке выше (и первый в вашей struct) следует заменить:

BalType type; 
+0

Спасибо большое! Это было полезно. – Thapipo

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