c++ - 如何处理: redeclaration of C++ built-in type ‘char16_t’

标签 c++ c c++11 compiler-errors

在 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/

相关文章:

c++ - 如何在 C/C++ 中从运行时卸载内存偏移量计算?

c++ - 使用派生自 `std::get` 的元素在 `std::tuple` 上调用 `std::tuple` - 格式错误?

c - "warning: control reaches end of non-void function"但实际上该函数被声明为 int 并返回一个 int

c - 如何让 Eclipse 识别 __far 修饰符?

c++ - gcc 4.8.1 是否支持 C++11 垃圾回收?

c++ - 为什么 std::accumulate 对于标准数组会有这样的行为?

c++ - 使用 MFC 的表/网格

c++ - 如何使用opencv将图像中的黄色仅转换为黑色?

C - 想要将 struct 类型的函数放在单独的 .c 文件中

linux - 如何在centos6上分发c++11共享库