我正在尝试使用Visual Studio 2010(32位)编译SkyFireEMU (https://github.com/ProjectSkyfire/SkyFireEMU),但是我收到一个错误(在"worldserver"的几乎所有文件上):
fatal error C1189: #error : sizeof(void *) is neither sizeof(int) nor sizeof(long) nor sizeof(long long)
这让我重新回到了代码的平静:
#if SIZEOF_CHARP == SIZEOF_INT
typedef int intptr;
#elif SIZEOF_CHARP == SIZEOF_LONG
typedef long intptr;
#elif SIZEOF_CHARP == SIZEOF_LONG_LONG
typedef long long intptr;
#else
#error sizeof(void *) is neither sizeof(int) nor sizeof(long) nor sizeof(long long)
#endif
有人可以帮助我解决这个问题吗?错误是什么意思?我真的不知道出了什么问题。
代码很旧。今天您可以使用typedef intptr_t intptr
(又名std::intptr_t
<cstdint>
)。
SIZEOF_CHARP
没有正确设置(根据编写该代码的人),因此调用了错误消息。您最好的选择是查阅 SkyFireEMU 文档,您可能需要在编译之前设置此标志,或者类似的东西。
话虽如此,我做了一个快速的谷歌并找到了这个,它描述了一个相同的错误消息。它建议在您提供的块之前编写以下内容:
#ifndef SIZEOF_CHARP
#define SIZEOF_CHARP SIZEOF_LONG
#endif
但是,可能仍然存在一个潜在的问题,因为这实际上只是抑制了错误。