#define 与.dll 头文件中的变量冲突

#define conflict with variable in .dll header file

我正在使用 Unreal Engine 4 和一些外部 .dll 库。我遇到了一个问题,其中 "PI" 在 unreal engine 核心代码中定义为“3.141592...”,如下所示:

#define PI                  (3.1415926535897932f)

然而,在我使用的.dll 库附带的头文件中,"PI" 是class:

的受保护成员变量的名称
protected:
  SomeDataType PI; 

我无法编辑定义,因为它在 Unreal Engine 的核心文件中使用。我相信我无法编辑头文件,因为它不再匹配底层的 .dll。

有什么好的解决办法吗?我可以在本地取消定义 "PI" 吗?

这是宏的问题,也是现代 C++ 程序员尽量避免使用它们的原因。

一种解决方案是让您的代码不直接包含 Unreal header 文件,而是编写如下内容:

// my_unreal.h
#include "unreal.h"
#undef PI

然后在您的其余代码中只执行 #include "my_unreal.h",而不是实际的虚幻 header。这样当任何其他代码发生时宏就消失了。