2014-11-16 5 views
0

У меня есть два файлы .h и .c файл как нижеForward декларация бросает ошибка переопределение

ах

typedef struct mode_info_t_ mode_info_t; 

struct common { 
    int create; 
    mode_info_t *mode_info; 
}; 

ЬН

typedef struct mode_info_t_ { 
    int primary; 
    int secondary; 
} mode_info_t; 

main.c
#include "a.h" 
#include "b.h" 

----- 

Когда .c скомпилировано, он бросает ниже err или -

b.h: 17: ошибка: переопределение ЬурейеГо 'mode_info_t'
хиджра: 50: ошибка: предыдущая декларация 'mode_info_t' здесь

Что-то здесь эксперты?

+0

Я не эксперт с typedef, но вы дважды набираете mode_info_t, один раз как другую переменную и еще раз как структуру ... что еще сказать? – Sam

+0

Это то, о чем говорит ошибка ... вы переопределили тип. Однако это не 'struct mode_info_t_', а' mode_info_t', который вы написали. – Dmitri

+0

@BLUEPIXY Вы правы. Еще одна причина заключается в том, почему несколько раз приходится вводить 'typedef' для одной и той же структуры. А также наличие пользовательского типа данных внутри структуры? – Gopi

ответ

0

Изменение b.h к этому:

struct mode_info_t_ { 
    int primary; 
    int secondary; 
}; 

Если вам нужно ЬурейеЕ в b.h, есть b.h включают хиджры Если вы не хотите, чтобы b.h включал a.h, но все еще нужно ввести typedef в обоих, тогда возьмите typedef из a.h и поместите его в c.h, и пусть оба a.h и b.h включают c.h.

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

+0

Да, я изменил b.h на typedef struct mode_info_t_ { int primary; int вторичный; } mode_info; – Jithu

0

У вас есть ваш ЬН

typedef struct mode_info_t_ { 
     int primary; 
      int secondary; 
}mode_info_t; 

Тогда ах

struct common { 
     int create; 
     mode_info_t *mode_info; 
}; 

В вашем main.c просто включить ЬН

#include "b.h" 
    #include "a.h" 


    int main() 
    { 
    } 
+0

Я не могу сделать сюда. Потому что a.h включен во многие другие файлы c, где я не хочу выставлять b.h. – Jithu

+0

@Jithu Затем сделайте это так, как показано в отредактированной версии – Gopi

0

Когда я компилирую сниппет вы дали, я Бесполезный Не получайте никаких ошибок и предупреждений. Можете ли вы показать нам свой полный код? Можно объявить структуру, и после этого вы можете ее определить.

typedef struct Node Node; 
struct Node { 
    int data; 
    Node *nextptr; 
}; 

Здесь вы делаете то же самое. Так что это не ошибка. Возможно, вы что-то неправильно его испортили.

+0

Будет ли его перепрограммировать. – Jithu

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