在 C++11 项目中,我必须使用外部 C 库。该库主头文件定义
typedef uint16_t char16_t;
因此,包含该库的 C++ 程序编译失败,并显示消息:
redeclaration of C++ built-in type ‘char16_t’
我唯一的想法是重新打包整个库,但是因为 char16_t
在这个库中很普遍,所以会非常耗时(如果可能的话)。有没有一些明智的方法来处理这个问题?
编辑:
我还有另一个想法,即删除有问题的行并将每次出现的 char16_t 替换为 uint16_t,但我将不得不修改第三方库 header ,我并不特别喜欢这个想法(可能会有更多类似的错误)。所以我也想知道在包含头文件时是否有一些好的方法来处理 C++ 和 C 之间更广泛的不兼容问题。
最佳答案
您可以使用宏来重命名库类型,同时保持它与新语言类型 char16_t
无关:
#define char16_t LIBRARY_char16_t
#include <library>
#undef char16_t
然后,库头将在您的代码库中编译,这样 typedef 的名称就为 LIBRARY_char16_t
。
库本身仍然被编译,因此所讨论的类型被类型定义为 uint16_t
所以你不应该试图改变它(例如通过删除类型定义)以保持二进制兼容与编译库。
关于c++ - 如何处理: redeclaration of C++ built-in type ‘char16_t’ ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24369383/