#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。这样当任何其他代码发生时宏就消失了。
我正在使用 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。这样当任何其他代码发生时宏就消失了。