在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之间不兼容问题的好方法。
答案 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
的答案