包含.h的c文件会导致奇怪的“多重定义”错误?

时间:2013-03-29 02:04:50

标签: c++ c include multiple-definition-error

我处理的项目包含c个源文件和c++个文件 我使用的代码如下:

extern "C"
{
    #include "init.h"
    #include "ParameterGet.h"//ParameterGet.c exists
}

包含c文件。

但是我得到了一个.h个c文件,其中没有.c个文件。 它导致(我认为)许多错误:

multiple definition of `PeriodicFaultReport'
multiple definition of `FaultActiveEventReport'
multiple definition of `FaultInactiveEventReport'
multiple definition of `FaultLatchEventReport'

其中PeriodicFaultReportFaultActiveEventReportFaultInactiveEventReportFaultLatchEventReport都在"DataStruct.h"中声明,而且此文件中没有.c个文件。

此外我注意到PeriodicFaultReportFaultActiveEventReportFaultInactiveEventReportFaultLatchEventReport都是global variables
[重要]

内容相对"DataStruct.h" c

struct  OptionalString PeriodicFaultReport;

struct  FaultActiveEventReportSet
{
    BOOL     Flag;
    UINT8    Type ;
    UINT32   Length;
    struct   Optional...  Report...[2];

}FaultActiveEventReport;

struct  FaultInactiveEventReportSet
{
    BOOL     Flag;
    UINT8    Type ;
    UINT32   Length  ;
    struct  Optional... Faultt...;

}FaultInactiveEventReport;

struct  FaultLatchEventReportSet
{
    BOOL     Flag;
    UINT8    Type ;
    UINT32   Length  ;
    struct  OptionalInteger  FaultID[2];

}FaultLatchEventReport; 

我知道可能会有像here这样的答案 但这不对:
我从c项目中获取了所有文件,其中"DataStruct.h"多次包含在其他.h文件中,没有问题。
c项目位于VS2008,这可能是没有问题的原因)
但这是真的,VS有助于解决这个问题并打破c标准吗?

0 个答案:

没有答案