在VS2010 Beta 1上使用基本C ++应用程序进行多次编译错误

时间:2009-08-31 09:32:21

标签: c++ visual-studio-2010 compilation

我刚刚从微软网站安装了VS2010 Beta 1,我启动了一个基本的C ++ Win32控制台应用程序,它生成了以下代码:

#include "stdafx.h"


int _tmain(int argc, _TCHAR* argv[])
{

return 0;
}

我尝试编译代码只是为了看它是如何运行的,然后我遇到了几个(超过100个)编译错误。

以下是构建输出的第一部分:

1>ClCompile:
1>  stdafx.cpp
1>c:\program files\microsoft visual studio 10.0\vc\include\crtdefs.h(520): error C2065: '_In_opt_z_' : undeclared identifier
1>c:\program files\microsoft visual studio 10.0\vc\include\crtdefs.h(520): error C2143: syntax error : missing ')' before 'const'
1>c:\program files\microsoft visual studio 10.0\vc\include\crtdefs.h(520): warning C4229: anachronism used : modifiers on data are ignored
1>c:\program files\microsoft visual studio 10.0\vc\include\crtdefs.h(520): error C2182: '_invalid_parameter' : illegal use of type 'void'
1>c:\program files\microsoft visual studio 10.0\vc\include\crtdefs.h(520): error C2491: '_invalid_parameter' : definition of dllimport data not allowed
1>c:\program files\microsoft visual studio 10.0\vc\include\crtdefs.h(520): error C2059: syntax error : ')'
1>c:\program files\microsoft visual studio 10.0\vc\include\crtdefs.h(527): error C2065: '_In_opt_z_' : undeclared identifier
1>c:\program files\microsoft visual studio 10.0\vc\include\crtdefs.h(527): error C2143: syntax error : missing ')' before 'const'
1>c:\program files\microsoft visual studio 10.0\vc\include\crtdefs.h(527): warning C4229: anachronism used : modifiers on data are ignored

pastebin获取完整列表

我想也许包含文件被我之前安装的其他编译器版本混淆了(我也有VS 2008)所以我重新安装了VS2010只是为了覆盖标题但是没有做太多。

提前感谢您提供的任何帮助,因为我很无助

12 个答案:

答案 0 :(得分:24)

问题在于: C:\ WINDDK \ 6001.18001 \ INC \ API \ sal.h

sal.h定义了注释,这些注释正在CRT标题中使用... DDK包含自己的sal.h,它已经过时,并且不包含所有注释。

有两种可能的解决方案: - 更改包含路径,以便“C:\ Program Files \ Microsoft Visual Studio 10.0 \ VC \ include”出现在“C:\ WinDDK \ 6001.18001 \ inc \ api”之前

  • 只需删除“C:\ WinDDK \ 6001.18001 \ inc \ api \ sal.h”:)

答案 1 :(得分:6)

只需使用'$(IncludePath); C:\ WinDDK \ 6001.18001 \ inc \ api'作为包含目录。

答案 2 :(得分:4)

您的包含路径有问题。使用“/ showIncludes”选项(IDE的项目选项中的“Configuration Properties / C / C ++ / Advanced / Show Includes”)来查看从哪里包含的标题。

有关详细信息,请参阅此问题:

答案 3 :(得分:3)

下的项目属性页面中添加DDK目录的路径后,我遇到了同样的问题
Configuration Properties -> C/C++ -> Additional Include Directories

将位置更改为

Configuration Properties -> VC++ Directories -> Include Directories

并在$(IncludePath)之后将路径添加到DDK一切正常。

Juriy Petrochenkov在他的评论中走在正确的轨道上,所以我重新检查了我添加DDK目录的地方,并且,看哪,这是错误的。谢谢Juriy!

答案 4 :(得分:1)

我发现我的include目录是从父目录或项目默认值继承的。问题是在VS2010中,包含路径的全局选项已被删除。经过一番搜索,我发现包含这些设置的两个文件(来自我以前安装的VS)位于以下目录中:

C:\ Users \用户名\应用程序数据\本地\微软\的msbuild \ V4.0 \

这两个文件是:

  1. Microsoft.Cpp.Win32.user.props
  2. Microsoft.Cpp.x64.users.props
  3. 编辑IncludePath变量

    删除DDK路径,保存文件,然后重新启动VS2010。这解决了我所有新项目的问题。

答案 5 :(得分:1)

是的,更改users.prop有效,但有多奇怪!您无法从Visual Studio中的菜单更改此设置,也无法在项目属性中覆盖它。即使您删除仅放入$(IncludePath)的设置,它仍然使用DDK的默认路径。

答案 6 :(得分:1)

或者您可以在C ++高级设置中的强制包含设置中添加$(VSInstallDir)\VC\include\sal.h。这会强制crtdef.h#include <sal.h>有效地#include "sal.h",但破坏性更小。强制它使用当前文件夹而不是包含系统路径。

答案 7 :(得分:1)

我遇到同样的问题,您可以将sal.hMicrosoft Visual Studio 10.0\VC\include复制到WinDDK\7600.16385.1\inc\api\,然后将Microsoft Visual Studio 10.0\VC\include\CodeAnalysis复制到WinDDK\7600.16385.1\inc\api\

答案 8 :(得分:0)

您是否曾使用先前版本构建项目? stdafx.h是msvc项目的标准预编译头名称。如果你使用VS2008构建,它可能已经创建了预编译的头,也许VS2010正在拾取它。 (如果您不熟悉,预编译头是编译器生成的构建输出,它会在下次构建时保留以加快头文件的编译。)

我会尝试清理,然后手动检查项目目录(如果它位于非显而易见的位置,则构建输出目录),然后是完整版本。如果没有修复它,我会在项目设置中关闭预编译的头文件(至少暂时)并重建。

答案 9 :(得分:0)

尝试更改项目 - &gt;属性 - &gt;配置属性 - &gt;一般 - &gt;字符集设置为“使用多字节字符集”

答案 10 :(得分:0)

添加/ showincludes参数后,我得到以下结果:

   1>  Note: including file: c:\testapp\stdafx.h
   1>  Note: including file:  c:\testapp\targetver.h
   1>  Note: including file:   C:\Program Files\Microsoft SDKs\Windows\v7.0A\include\WinSDKVer.h
   1>  Note: including file:   C:\WinDDK\6001.18001\inc\api\SDKDDKVer.h
   1>  Note: including file:  C:\Program Files\Microsoft Visual Studio 10.0\VC\include\stdio.h
   1>  Note: including file:   C:\Program Files\Microsoft Visual Studio 10.0\VC\include\crtdefs.h
   1>  Note: including file:    C:\WinDDK\6001.18001\inc\api\sal.h
   1>  Note: including file:    C:\Program Files\Microsoft Visual Studio 10.0\VC\include\vadefs.h

这是有道理的,因为某种原因,它从DDK路径加载两个文件,而不是VS2010包括dir,如果这实际上是问题,我怎么告诉它使用正确的路径?

答案 11 :(得分:0)

  1. 避免MFC,WTL和ATL错误。
  2. 转到C / C ++一般“附加包含目录” $(SystemDrive)\ Program Files \ Microsoft Visual Studio 9.0 \ VC \ include

    1. 对于Windows默认宏错误。         如果任何与Windows相关的宏问题如下所示 IN ,_IN_OPT_和 OUT 转到C / C ++预处理器“忽略标准包含路径”到YES