C语言的重定义错误,求解
C语言中经常对见到重定义的错误,起码我写代码时会这样。在看别人代码的时候,经常对看到一些自己喜欢的功能,想要把它们提取出来,写成一个头文件方便自己后面使用。这个本来也不算...
C语言中经常对见到重定义的错误,起码我写代码时会这样。
在看别人代码的时候,经常对看到一些自己喜欢的功能,想要把它们提取出来,写成一个头文件方便自己后面使用。
这个本来也不算多难的事情,但是你经常要去改动文件的组织结构,这样就会涉及到头文件的包含问题,很容易就碰到重定义错误,很让人沮丧。
别人的代码为了简便,直接将功能函数和main函数写在了一起,也就是说,他根本就不需要include。文件只有2个,EnumSymbols.h和EnumSymbols.cpp。
现在我想把main函数充EnumSymbols.cpp中拿到Main.cpp中,然后在Main.cpp中includeEnumSymbols.h文件。这样后续EnumSymbols.h和EnumSymbols.cpp文件可以作为一个功能库文件来用,会比较方便。但是出现了重定义错误,是在EnumSymbols.h中定义的结构体报的错。
比如这句:
// 系统模块信息
typedef struct _SYSTEM_MODULE_INFORMATION
{
ULONG Reserved[2];
ULONG Base;
ULONG Size;
ULONG Flags;
USHORT Index;
USHORT Unknown;
USHORT LoadCount;
USHORT ModuleNameOffset;
CHAR ImageName[256];
} SYSTEM_MODULE_INFORMATION, *PSYSTEM_MODULE_INFORMATION;
重复包含的原因其实我也是知道的。Main.cpp和EnumSymbols.cpp都要include EnumSymbols.h。这是2个cpp文件,所以使用 #ifdef #endif或者#pragma once 都是搞不定的,那个只能解决同一文件中的重复引用。现在重复包含是出现在2个cpp文件中的,报错在obj文件连接的时候出现。
有没有啥好方式给解决下这个问题? 展开
在看别人代码的时候,经常对看到一些自己喜欢的功能,想要把它们提取出来,写成一个头文件方便自己后面使用。
这个本来也不算多难的事情,但是你经常要去改动文件的组织结构,这样就会涉及到头文件的包含问题,很容易就碰到重定义错误,很让人沮丧。
别人的代码为了简便,直接将功能函数和main函数写在了一起,也就是说,他根本就不需要include。文件只有2个,EnumSymbols.h和EnumSymbols.cpp。
现在我想把main函数充EnumSymbols.cpp中拿到Main.cpp中,然后在Main.cpp中includeEnumSymbols.h文件。这样后续EnumSymbols.h和EnumSymbols.cpp文件可以作为一个功能库文件来用,会比较方便。但是出现了重定义错误,是在EnumSymbols.h中定义的结构体报的错。
比如这句:
// 系统模块信息
typedef struct _SYSTEM_MODULE_INFORMATION
{
ULONG Reserved[2];
ULONG Base;
ULONG Size;
ULONG Flags;
USHORT Index;
USHORT Unknown;
USHORT LoadCount;
USHORT ModuleNameOffset;
CHAR ImageName[256];
} SYSTEM_MODULE_INFORMATION, *PSYSTEM_MODULE_INFORMATION;
重复包含的原因其实我也是知道的。Main.cpp和EnumSymbols.cpp都要include EnumSymbols.h。这是2个cpp文件,所以使用 #ifdef #endif或者#pragma once 都是搞不定的,那个只能解决同一文件中的重复引用。现在重复包含是出现在2个cpp文件中的,报错在obj文件连接的时候出现。
有没有啥好方式给解决下这个问题? 展开
6个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询