使用两个不同的SDK 结构体命名冲突问题

 

项目中,使用了第三方 播发器SDK、 直播推流SDK

将其添加到工程中,进行编译时,发现结构体重定义,原因两个SDK定义了同名的结构体

 

播放器SDK

#define  NELP_MASK_TYPE(_name, _type)  struct stru_##_name##_type {int iUnused; } *

/***NELP 函数返回值***/
typedef  NELP_MASK_TYPE(_RET, int)      NELP_RET;

 

直播SDK定义

#define  NLSS_MASK_TYPE(_name, _type)  struct stru_##_name##_type {int iUnused; } *

/***NLSS 函数返回值***/
typedef  NLSS_MASK_TYPE(_RET, int)      NLSS_RET;

 

编译提示: error C2011: 'stru__RETint' : 'struct' type redefinition

可以看到,定义了同名的结构体

 

原因:

将SDK封装为C++接口时,是这么添加播放器SDK头文件的

播放器SDK

使用两个不同的SDK 结构体命名冲突问题

直播SDK

使用两个不同的SDK 结构体命名冲突问题

这样 都在同一个命名空间中,所以出现了冲突

 

解决:

将其置入命名空间下就可以了

使用两个不同的SDK 结构体命名冲突问题