C typedef struct不确定性

时间:2011-01-12 10:50:18

标签: c struct typedef

在C中考虑以下typedef结构:

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 个答案:

答案 0 :(得分:6)

您确定没有将标题包括两次(不使用#ifndef / #pragma once来避免这种情况)吗? 即使你的构造中出现了一些错误,它也不应该触发错误“重新定义'......'”因为它是第一行?

答案 1 :(得分:3)

最可能的原因是您的头文件被多次包含。 您需要确保如果发生这种情况,则只执行一次typedef。

你可以通过使用:

包装globals.h来实现
  #ifndef _globals_h_
  #define _globals_h_
  [...]
  #endif

答案 2 :(得分:3)

错误表示已定义struct source多次。

也许您将头文件包括两次?

为了安全起见,请确保您的标题只包含一次:put

#ifndef YOUR_HEADER_FILE_NAME
#define YOUR_HEADER_FILE_NAME

一开始,

#endif

在头文件的末尾:这将阻止任何源文件将其包含两次或更多次。