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

时间:2016-09-14 05:22:55

标签: c++ dll unreal-engine4 member-variables

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

#define PI                  (3.1415926535897932f)

但是,在我使用的.dll库提供的头文件中,“PI”是类的受保护成员变量的名称:

protected:
  SomeDataType PI; 

我无法编辑define,因为它在虚幻引擎的核心文件中使用。我相信我无法编辑头文件,也不会再与底层的.dll匹配。

这有一个很好的解决方案吗?我可以在本地取消定义“PI”吗?

1 个答案:

答案 0 :(得分:1)

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

一种解决方案是让您的代码不直接包含Unreal头文件,但要构成如下内容:

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

然后在代码的其余部分只执行#include "my_unreal.h",而不是实际的虚幻标头。因此,任何其他代码发生时宏都会消失。