我已经获得了两个包含两个同名typedef的头文件.
我们来说aaa.h和bbb.h.它们来自2个不相关的第三方软件包,我无法控制这两个文件,但必须使用它们.我没有直接包含这两个文件,但它们相当包含在顶级头文件中. (即我包括分别包含它们的a.h和b.h)
由于名称冲突,我的程序不会被编译.
所以我的临时解决方案是将aaa.h复制到我的源代码树中,只删除了typedef,名为myaaa.h.在文件的顶部,我保留了“#ifndef AAA_H,#define AAA_H”包装器,所以当我包含myaaa.h时,由于AAA_H标志已经定义,因此不会包含aaa.h,间接删除了typedef冲突.
有没有一种更聪明的方法来做这个而不添加这样的文件(我必须对它进行版本控制)到我的源代码?
谢谢!
解决方法
#define conflicting_typedef aaa_conflicting_typedef #include "aaa.h" #undef conflicting_typedef #define conflicting_typedef bbb_conflicting_typedef #include "bbb.h" #undef conflicting_typedef #define conflicting_typedef ambiguous use aaa_conflicting_typedef or bbb_conflicting_typedef
如果需要从aaa.h引用typedef,可以使用名称aaa_conflicting_typedef;要从bbb.h引用typedef,请使用名称bbb_conflicting_typedef.如果(可能就是这种情况)你不需要在代码中引用任何一个typedef,那么你就可以了.最终的#define确保您不使用普通名称;您必须使用正确的映射名称.
显然,这不应该重复;如果有多个文件需要这个节,你可以把它放到你自己的标题“aaa_bbb.h”中,并包含你需要这个节的地方.您甚至可以检测是否已经包含了aaa.h或bbb.h,如果有,则拒绝编译(在此之后您无法检测到它们是否包含在内,但事实上它们已被包含在您的下面)控制意味着它们不应再被包括在内).