【问题标题】:Very Mysterious/Random C++ WDK STL 7 Error: iosfwd(202): error C2144: syntax error非常神秘/随机的 C++ WDK STL 7 错误:iosfwd(202):错误 C2144:语法错误
【发布时间】:2011-05-13 06:20:49
【问题描述】:

我有一个名为Temp.cpp 的小文件:

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

我正在尝试使用 WDK 7.1 在 Windows XP Free Build Environment 中使用以下命令行对其进行编译:

cl.exe /Iinc\api\crt\stl70 /Iinc\crt C:\Temp.cpp

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

Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 15.00.30729.207 for 80x86

C:\WinDDK\7600.16385.1\inc\api\crt\stl70\iosfwd(202) :
    error C2144: syntax error : 'int' should be preceded by ';'

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

问题的原因是什么?


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


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

【问题讨论】:

  • 有趣的是,我尝试搜索 WDK stl70 errors 并猜测在谷歌中排名第一的内容是什么……这该死的东西每天都变得越来越快。 o_O
  • @Xeo: 哈哈,是的,这真是个野兽 :)
  • VC 7.0 是有史以来最糟糕的编译器之一。 :-( 当前版本是 10.0 SP1。
  • 不确定实际的问题是什么,但你不是必须在main 中有return 吗?
  • @Andrey:你不需要在 C++ 中的 main() 中使用 return

标签: c++ winapi windows-7 stl wdk


【解决方案1】:

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

我需要定义_STL70_

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 不,这是正确的。我使用了开始菜单条目(Windows Driver Kits->Build Environments->Windows XP->etc.),我 100% 确定它是正确的编译器/链接器。我什至没有安装VC6,哈哈。
    • VC6 编译器也随旧版 WDK 一起提供。
    • 不; Process Monitor 告诉我我正在打开正确的编译器、文件和所有内容。 (我的 PATH 中也没有任何编译器。)
    • @Mehrdad:为了让每个人都知道正在处理什么编译器,请将编译器打印出的徽标/横幅行粘贴到问题中作为输出的第一行。
    【解决方案3】:

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

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

    /D_SCL_SECURE_NO_DEPRECATE
    

    但鉴于您看到的错误消息,听起来您正在使用比头文件支持更早的编译器来编译头文件(所以这可能不会让您走得太远)。

    【讨论】:

    • 是的,已经试过了。不,它没有帮助,虽然谢谢。 :\ 不,我使用的是完全正确的编译器,我什至重新安装了它。我确信问题绝对不是那种问题。这只是标志/宏的问题。
    猜你喜欢
    • 1970-01-01
    • 2015-03-13
    • 2017-04-20
    • 2014-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-08
    • 1970-01-01
    相关资源
    最近更新 更多