在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;
哪两个都返回相同的错误。 为什么会这样?它看起来非常合适。
答案 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
在头文件的末尾:这将阻止任何源文件将其包含两次或更多次。