【问题标题】:Building in 64 bit Windows on VS2008 gives C2632 error在 VS2008 上构建 64 位 Windows 会导致 C2632 错误
【发布时间】:2010-06-29 16:28:34
【问题描述】:

所以我正在尝试在 64 中构建一个 32 位应用程序。 我正在链接到所有 64 位库,并且我已经重新编译了我们用于 64 位的所有内容。

我现在遇到奇怪的错误。 我在网上看到了一些类似的错误,但在这些主题中没有任何用处。

知道导致这种行为的原因是什么吗?

警告 C4091: 'typedef' : 当没有声明变量时,'float' 左侧被忽略 C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\windef.h 错误 C2632:'float' 后跟 'double' 是非法的
C:\Program Files\MicrosoftSDKs\Windows\v6.0A\include\windef.h

警告 C4091: 'typedef' : 在没有声明变量时忽略'double' 左侧 C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\wtypes.h 错误 44 错误 C2632:'double' 后跟 'double' 是非法的
C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\wtypes.h

警告和错误是针对同一行的。 显然它不是 wtypes.h 和 windef.h 的问题(如果是我也无能为力)

typedef float               FLOAT;

typedef double DOUBLE;

显然这些本身就很好,所以它必须是别的东西。 我的项目中导致此问题的文件仅包含

有什么想法吗?

【问题讨论】:

  • FLOAT 和 DOUBLE 之前/其他地方是否定义为宏? (甚至是本地来源?)

标签: c++ visual-studio-2008 build win64


【解决方案1】:

看起来 FLOATDOUBLE 以前是 #defined 到 double。这可能是另一个库的结果,尽管它似乎不太可能是由切换到 64 位编译引起的。尝试做

#undef FLOAT
#undef DOUBLE

在包含 windows.hwindef.h 或任何直接导致警告的文件之前。

【讨论】:

  • 这似乎解决了问题,但我如何找出超出定义的内容?
  • 如果您将#define DOUBLE TESTER 之类的内容作为源文件的第一行,编译器应该在它被重新定义为double 的位置(很可能包括行)对您大喊大叫。
  • 您也可以使用试错法(注释掉#includes)或查看预处理器输出(cl /E)。不过,Mark B 的建议可能是您最好的选择。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-08
  • 1970-01-01
  • 2015-06-13
  • 2012-12-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多