2009-08-31 109 views
20

我刚刚安装VS2010 Beta 1的从微软的网站,我开始了基本的C++ Win32控制台应用程序,生成下面的代码:多个编译错误1

#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只是为了覆盖头文件,但这并没有太大的作用。

预先感谢,我很无奈

+1

如果粘贴的第一个可能是有益的或两条错误消息。 – sbi 2009-08-31 09:38:35

+0

我把它们粘贴在我发布的pastebin链接 – user112771 2009-08-31 09:49:02

+0

把它们放在你的问题中,所以它们很容易阅读,所以在pastebin链接死后,你的问题仍然会有意义。 – jalf 2009-08-31 10:23:58

回答

0

你有没有建立与现有版本的项目可能会提供一些帮助? stdafx.h是msvc项目的标准预编译头名称。如果你使用VS2008构建,它可能已经创建了预编译头文件,也许VS2010正在采用它。 (如果你不熟悉,一个预编译的头文件是由编译器生成的编译输出,它会在下一次编译时加速编译头文件。)

我想尝试一个干净的,然后手动检查的项目目录(并建立输出目录,如果它在一个非显而易见的地方),然后一个完整的构建。如果没有解决它,我会关闭项目设置中的预编译头文件(至少暂时)并重新编译。

+0

我从来没有用以前的版本构建过这个项目,这是一个新项目,我试图清理它,然后重新创建它,但没有预编译头文件,但仍出现同样的问题 – user112771 2009-08-31 09:48:23

0

尝试改变项目 - >属性 - >配置属性 - >常规 - >字符集为“使用多字节字符集”

+0

我有一个阅读解决方案的地方,它认为人们使用旧标准使用“int main()”而不是“int _tmain”等方式,不仅我使用“_tmain”,但我也尝试更改该设置,如果您在XP上运行,并不能解决问题 – user112771 2009-08-31 10:23:18

+0

,在XP上安装beta 1的错误。请检查您是否拥有此属性表:“Microsoft.Cpp.Win32.User”。如果没有,请尝试以下链接:http://blogs.msdn.com/vsproject/archive/2009/07/07/vc-directories.aspx – 2009-08-31 11:03:37

4

某处有问题,你的include路径。使用IDE的项目选项中的“/ showIncludes”选项(“配置属性/ C/C++ /高级/显示包含”)查看哪些标题包含在哪里。

详情请参见这个问题:

+0

/showIncludes选项通常是关于想到的最好的东西这样的问题。 – 2013-11-21 18:55:56

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包含目录,如果这实际上是问题,我该怎么做它会使用正确的路径吗?

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” :)
+0

非常感谢替代方案2.我的路径已经如您所描述的那样,但问题仍然存在。删除sal.h做到了! – AnnaR 2011-05-16 14:04:41

+3

我能够使用方法一。 DDK的源包括继承的属性表“Microsoft.Cpp.Win32.User”。这增加了继承的'$(VCInstallDir)include'中的DDK _before_。为了解决这个问题,在DDK之前的“Microsoft.Cpp.Win32.User”表中添加一个额外的'$(VCInstallDir)include'。 – MSalters 2011-06-03 12:32:31

1

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

C:\ users \ username \ appdata \ local \ microsoft \ msbuild \ v4.0 \

两个文件是:

  1. Microsoft.Cpp.Win32.user.props
  2. Microsoft.Cpp.x64.users.props

编辑INCLUDEPATH变量

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

1

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

1

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

6

只要使用 '$(INCLUDEPATH); C:\ WINDDK \ 6001.18001 \ INC \ API' 为包括目录。

+0

谢谢 - 为我工作 – jolyon 2012-08-27 05:35:56

1

我有同样的问题,你可以从Microsoft Visual Studio 10.0\VC\include复制sal.hWinDDK\7600.16385.1\inc\api\和复制Microsoft Visual Studio 10.0\VC\include\CodeAnalysisWinDDK\7600.16385.1\inc\api\

3

我下

Configuration Properties -> C/C++ -> Additional Include Directories 

添加路径在项目属性页的DDK目录位置更改为

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

后添加路径DDK后后有同样的问题$(IncludePath)一切正常。

Juriy Petrochenkov是在正确的轨道,他的话,所以我复查,我已经添加了DDK目录,和,你瞧,这是错误的。感谢Juriy!

0
  1. 为了避免MFC,WTL和ATL错误。

转到C/C++General“其他包含目录” $(SystemDrive)\ Program Files \ Microsoft Visual Studio 9。0 \ VC \ include

  1. 对于Windows默认宏错误。 如果相关宏观问题,如以下IN,_IN_OPT_和任何窗口OUT 转到C/C++Preprocessor“忽略标准包含路径”为YES