C typedef struct неопределенность - PullRequest
1 голос
/ 12 января 2011

Рассмотрим следующую структуру typedef в C:

21:typedef struct source{
22: double  ds;             //ray step
23: double  rx,zx;          //source coords
24: double  rbox1, rbox2;   //the box that limits the range of the rays
25: double  freqx;          //source frequency
26:    int64_t  nThetas;        //number of launching angles
27:    double   theta1, thetaN; //first and last launching angle
28:}source_t;

Я получаю ошибку:
globals.h: 21: ошибка: переопределение 'struct source'
globals.h: 28: ошибка: конфликт типов для 'source_t'
globals.h: 28: примечание: предыдущее объявление 'source_t' было здесь

Я пытался использовать другие форматы для этого определения:


struct source{
...
};
typedef struct source source_t;

и


typedef struct{
...
}source_t;

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

Ответы [ 3 ]

6 голосов
/ 12 января 2011

Вы уверены, что не включили свой заголовок дважды (без использования #ifndef / #pragma once, чтобы избежать этого)? Даже если в вашей конструкции была какая-то ошибка, она не должна вызывать ошибку «переопределение» ... потому что это самая первая строка?

3 голосов
/ 12 января 2011

В ошибках говорится, что struct source был определен более одного раза.

Может быть, вы включили заголовочный файл дважды?

Чтобы быть в безопасности, убедитесь, что ваш заголовок включен только один раз: put

#ifndef YOUR_HEADER_FILE_NAME
#define YOUR_HEADER_FILE_NAME

в начале и

#endif

в конце заголовочного файла: это предотвратит включение его дважды или более в любой исходный файл.

3 голосов
/ 12 января 2011

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

Вы можете сделать это, обернув globals.h:

  #ifndef _globals_h_
  #define _globals_h_
  [...]
  #endif
...