Подтвердить что ты не робот

Множественные ошибки компиляции с базовым приложением С++ на VS2010 Beta 1

Недавно я установил VS2010 Beta 1 с сайта Microsoft, я начал использовать базовое консольное приложение С++ 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 только для того, чтобы перезаписать заголовки, но это мало что делало.

Заранее благодарим за любую помощь, которую вы можете предложить, поскольку я беспомощный

4b9b3361

Ответ 1

Проблема здесь: 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":)

Ответ 2

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

Ответ 3

Что-то не так с вашим путём include. Используйте опцию "/showIncludes" ( "Свойства конфигурации/C/С++/Дополнительно/Показывать включает" в опции проекта IDE), чтобы узнать, какие заголовки включены с этого места.

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

Ответ 4

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

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

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

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

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

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

Ответ 5

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

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

Два файла:

  • Microsoft.Cpp.Win32.user.props
  • Microsoft.Cpp.x64.users.props

Отредактируйте переменную IncludePath

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

Ответ 6

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

Ответ 7

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

Ответ 8

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

Ответ 9

Вы когда-нибудь строили проект с предыдущей версией? stdafx.h - это стандартное предварительно скомпилированное имя заголовка для проектов msvc. Если вы построили VS2008, он мог бы создать предварительно скомпилированный заголовок, и, возможно, VS2010 подберет его. (Если вы не знакомы, предварительно скомпилированный заголовок - это результат сборки, созданный компилятором, который ускоряет сборку файлов заголовков при следующем создании.)

Я бы попробовал чистую, затем ручную проверку каталога проекта (и построил выходной каталог, если он был в неочевидном месте), а затем полную сборку. Если это не исправить, я бы отключил предварительно скомпилированные заголовки (по крайней мере временно) в настройках проекта и перестроил.

Ответ 10

Попробуйте изменить проект- > свойства → свойства конфигурации → общий → Набор символов для "Использовать многобайтовый набор символов"

Ответ 11

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

Ответ 12

  • Чтобы избежать ошибок MFC, WTL и ATL.

Перейти к C/С++ General "Дополнительно включить Directory" $ (SystemDrive)\Program Files\Microsoft Visual Studio 9.0\VC\include

  • Ошибка макроса окна по умолчанию.       Если какие-либо связанные с окном макросы возникают, например, следующие IN, _IN_OPT_ и OUT Goto C/С++ Преобразователь "Игнорировать стандартный путь включения" в YES