Tri*_*tos 6 c c++ compiler-errors c++11
在C++ 11项目中,我必须使用外部C库.此库主头文件定义
typedef uint16_t char16_t;
Run Code Online (Sandbox Code Playgroud)
因为它包含这个库的C++程序的编译失败,消息:
redeclaration of C++ built-in type ‘char16_t’
Run Code Online (Sandbox Code Playgroud)
我唯一的想法是重新打包整个库,但因为char16_t在这个库中普遍存在,所以非常耗时(如果可能的话).是否有一些明智的方法来处理这个问题?
编辑:
我还有另一个想法是删除有问题的行并用uint16_t替换每个char16_t,但我必须修改第三方库头,我不是特别喜欢这个想法(可能有更多类似的错误).所以我也想知道在包含头文件时是否有一些处理C++和C之间不兼容问题的好方法.
lee*_*mes 13
您可以使用宏来重命名库类型,同时保持它与新语言类型无关char16_t:
#define char16_t LIBRARY_char16_t
#include <library>
#undef char16_t
Run Code Online (Sandbox Code Playgroud)
然后,库头将在您的代码库中编译,以便typedef具有名称LIBRARY_char16_t.
库本身仍然编译,有问题的类型Typedef的到uint16_t,所以你不应该试图以保持与编译库二进制兼容(去除的typedef例如通过),以改变这种状况.