所以我在这里有一点立场,我不确定如何继续进行,或者它是否可以解决......
我们使用其他团队提供的第三方SDK,此SDK必须用于我们的应用才能正常运行。
在此SDK中,有这样的行
#define uint16_t UINT16
#define uint8_t UINT8
问题出在Boost中,更具体地说,ASIO / Details / cstdint.hpp文件中有
行。using std::uint16_t
using std::uint8_t
我的应用程序现在不会编译因为它真的在做
using std::UINT16
using std::UINT8
它抱怨这些类型显然不存在于std命名空间中。
这些UINT16和UINT8定义在应用程序中的任何地方都非常大,因此替换它们并不是很可行,我甚至不确定如果我这样做,SDK是否会起作用。
在包含boost头文件之前,我可以尝试#undef所有这些定义吗?然后重新定义它们?看起来很傻,我怀疑它甚至会起作用。
有什么建议吗?
答案 0 :(得分:9)
问题出在Boost中,更具体地说,ASIO / Details / cstdint.hpp文件中有
行。
那是颠倒的。问题显然在标题中重新定义了完全常见的类型名称。
最可行的解决方案是不在包含任何提升标头之前包含SDK标头。
拼凑而成的解决方法是取消定义宏。 (如果你问我,那条路就是疯狂的):
#ifdef uint16_t
#undef uint16_t
#endif