非常神秘/随机C++ WDK STL 7 错误: iosfwd(202): 错误 C2144: 语法错误

Very Mysterious/Random C++ WDK STL 7 Error: iosfwd(202): error C2144: syntax error

本文关键字:错误 iosfwd 语法 C2144 随机 C++ STL WDK 非常      更新时间:2023-10-16

我有以下名为Temp.cpp的琐碎文件:

#include <string>
int main() { return 0; }

我正在尝试使用 WDK 7.1 在 Windows XP 免费构建环境中使用以下命令行编译它:

cl.exe /Iincapicrtstl70 /Iinccrt C:Temp.cpp

我收到非常随机的错误,例如:

Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 15.00.30729.207 for 80x86
C:WinDDK7600.16385.1incapicrtstl70iosfwd(202) :
    error C2144: syntax error : 'int' should be preceded by ';'

如果我使用 stl60 而不是 stl70,错误就会消失,但这并不能解决问题。

问题的原因是什么?


更新:我尝试再次卸载并安装 WDK,但没有任何变化。 :(


更新2:好的,显然错误在头文件本身尖叫:_SCL_INSECURE_DEPRECATE是原因。有人知道如何正确关闭它吗?(如果我只是注释掉这些行,我会收到更多关于其他宏的错误。

通过修改标题和猜测检查,自己找到了答案:

我需要定义_STL70_

你在选择哪cl.exe?如果您的路径碰巧在 WDK 编译器之前有一个较旧的 (VC6) 编译器,则预计会出现这些错误。VC6 无法编译 VC7 附带的 STL

显然,错误在头文件本身尖叫:_SCL_INSECURE_DEPRECATE是原因。有人知道如何正确关闭它吗?

如果您在使用_SCL_INSECURE_DEPRECATE时遇到问题,请尝试设置:

/D_SCL_SECURE_NO_DEPRECATE

但是鉴于您看到的错误消息,听起来您正在使用比标头支持的编译器更早的编译器编译标头(因此无论如何这可能不会让您走得很远)。