如何处理:重新声明C ++内置类型'char16_t'

时间:2014-06-23 15:11:38

标签: 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在这个库中普遍存在,所以非常耗时(如果可能的话)。是否有一些合理的方法来处理这个问题?

修改

我还有另一个想法是删除有问题的行并用uint16_t替换每个char16_t,但我必须修改第三方库头,我不是特别喜欢这个想法(可能会有更多类似的错误)。所以我也想知道在包含头文件时是否有一些处理C ++和C之间不兼容问题的好方法。

1 个答案:

答案 0 :(得分:2)

C ++ 11将char32_t和char16_t定义为内置类型。只有在使用C ++ 11时才会出现此错误。即在你的 Application.mk 文件中:

APP_CPPFLAGS += -std=c++11

你可以删除C ++ 11支持, OR 使用以下解决方法,这应该是官方Android源代码的一部分(如果还没有)。

文件 /frameworks/native/include/utils/Unicode.h

#if __cplusplus <= 199711L
typedef uint32_t char32_t;
typedef uint16_t char16_t;
#endif

它基于a question about char16/32_t with C++11

的答案