несколько ошибок компиляции с базовым приложением C ++ на VS2010 Beta 1 - PullRequest
20 голосов
/ 31 августа 2009

Я только недавно установил VS2010 Beta 1 с веб-сайта Microsoft, я запустил базовое консольное приложение C32 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 ]

24 голосов
/ 22 февраля 2010

Проблема здесь: C: \ WinDDK \ 6001,18001 \ вкл \ апи \ sal.h

sal.h определяет аннотации, которые используются в заголовках CRT ... DDK включает в себя собственный sal.h, который устарел и не содержит всех аннотаций.

Есть 2 возможных решения: - изменить пути включения так, чтобы «C: \ Program Files \ Microsoft Visual Studio 10.0 \ VC \ include» предшествовал «C: \ WinDDK \ 6001.18001 \ inc \ api»

  • просто удалите "C: \ WinDDK \ 6001.18001 \ inc \ api \ sal.h":)
6 голосов
/ 17 апреля 2011

Просто используйте '$ (IncludePath); C: \ WinDDK \ 6001.18001 \ inc \ api' в качестве включаемых каталогов.

4 голосов
/ 31 августа 2009

Что-то не так с вашим путём включения. Используйте параметр «/ showInclude» («Свойства конфигурации / C / C ++ / Advanced / Show Includes» в параметрах проекта среды IDE), чтобы узнать, какие заголовки откуда включаются.

См. Этот вопрос для получения более подробной информации:

3 голосов
/ 19 марта 2012

У меня была такая же проблема после добавления пути к каталогу DDK на страницах свойств проекта в

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

После изменения местоположения на

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

и добавление пути к DDK после $ (IncludePath) все работало нормально.

Юрий Петроченков был на правильном пути со своим замечанием, поэтому я перепроверил, куда я добавил каталог DDK, и, о чудо, он был неправильным. Спасибо, Юрий!

1 голос
/ 14 декабря 2011

У меня та же проблема, вы можете скопировать 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\.

1 голос
/ 08 сентября 2010

или вы можете добавить $(VSInstallDir)\VC\include\sal.h к принудительному включению настроек в дополнительных настройках C ++. Это заставит crtdef.h line #include <sal.h> эффективно к #include "sal.h", но гораздо менее разрушительно. заставляя его использовать текущую папку, а не включать системные пути.

1 голос
/ 25 мая 2010

Да, смена users.prop работает, но как странно! Вы не можете изменить этот параметр из меню в Visual Studio и не можете перезаписать его в свойствах проекта. Даже если вы удалите параметр, просто вставив $ (IncludePath), он все равно использует путь по умолчанию к DDK.

1 голос
/ 27 апреля 2010

Я обнаружил, что мой каталог include наследовал от родительского или проекта по умолчанию. Проблема в том, что в VS2010 глобальные опции для включаемых путей были удалены. После некоторых поисков я обнаружил, что два файла с этими настройками (из моей предыдущей установки VS) находились в следующем каталоге:

C: \ Users \ имя пользователя \ AppData \ Local \ Microsoft \ MSBuild \ v4.0 \

Два файла:

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

Редактировать переменную IncludePath

Удалить путь DDK, сохранить файл и перезапустить VS2010. Это решило мою проблему для всех новых проектов.

0 голосов
/ 08 июня 2012
  1. Чтобы избежать ошибок MFC, WTL и ATL.

Перейти к C / C ++ «Генеральный» «Каталог дополнительных включений» $ (SystemDrive) \ Program Files \ Microsoft Visual Studio 9.0 \ VC \ include

  1. Для Windows ошибка макроса по умолчанию. Если какие-либо проблемы с макросами, связанные с Windows, такие как IN , _IN_OPT_ и OUT Перейдите к C / C ++ «Препроцессор» «Игнорировать стандартный путь включения» к YES
0 голосов
/ 01 сентября 2009

После добавления параметра / showinclude я получил следующий результат:

   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, если на самом деле это проблема, как мне сказать ему использовать правильный путь?

...