【发布时间】:2021-08-27 07:25:33
【问题描述】:
我有一个带有多个插件的虚幻引擎 4 项目。这些插件中的一个包含一个FileHelper 类和一个方法CreateFile。这几个月来一直运行良好,但在最近的一次提交中,一个不同的插件添加了对FileHelper::CreateFile 的调用,现在有时我收到一个链接器错误,说CreateFileW 不是FileHelper 的成员(这不会出现在每个构建中,我还无法解释)。
我继续像这样暂时取消定义CreateFile
#include "UtilPlugin/File/FileSystemHelper.h"
#ifdef _WIN32
#pragma push_macro("CreateFile")
#undef CreateFile
#endif //_WIN32
...//new code including CreateFile call
#ifdef _WIN32
#pragma pop_macro("CreateFile")
#endif //_WIN32
但现在我收到错误
C2039 'CreateFile': 不是 'FileSystemHelper' 的成员
C3861 'CreateFile':找不到标识符
由于我知道CreateFile 在其他地方被成功调用(至少在与FileSystemHelper 相同的插件中),我知道它存在。
因此我的问题是,如果 undefine 可以影响这样的成员函数。
我已将 #undef 部分移到代码中包含的上方,并且不再出现错误,但由于它看似随机发生,我不完全确定我是否真的解决了问题。
【问题讨论】:
-
#undef是一个预处理器指令。预处理器修改代码(例如源文件包含或宏扩展),编译器编译修改后的代码,而不是原始代码。 -
大概是在定义
CreateFile函数时定义了宏,导致定义实际上是针对CreateFileW或CreateFileA -
我不确定我是否完全理解。这是否意味着
#undef会影响成员,无论它是放在代码中包含之前还是之后?
标签: c++ linker unreal-engine4 undef