我刚刚从微软网站安装了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只是为了覆盖标题但是没有做太多。
提前感谢您提供的任何帮助,因为我很无助
答案 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”之前
答案 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 \
这两个文件是:
编辑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.h
从Microsoft 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)
转到C / C ++一般“附加包含目录” $(SystemDrive)\ Program Files \ Microsoft Visual Studio 9.0 \ VC \ include