2009-08-31 10 views
20

ho installato da poco VS2010 Beta 1 dal sito Web Microsoft, ho iniziato una base C++ applicazione console Win32, che ha generato il seguente codice:più errori compilazione con applicazioni di base C++ su VS2010 Beta 1

#include "stdafx.h" 


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

return 0; 
} 

ho provato compilando il codice solo per vedere come funziona e solo allora ho riscontrato diversi errori di compilazione (oltre 100).

Ecco la prima parte dell'output di compilazione:

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 per l'elenco completo

ho pensato che forse il file include ricevuti confuse da qualche altra versione del compilatore Ho installato in precedenza (I anche VS 2008), quindi ho reinstallato VS2010 solo per sovrascrivere le intestazioni, ma questo non ha fatto molto.

Grazie in anticipo per qualsiasi aiuto che potrebbe offrire come io sono impotente

+1

Potrebbe essere utile se si è incollato il primo o due messaggi di errore. – sbi

+0

Li ho incollati nel collegamento pastebin che ho postato – user112771

+0

Inseriscili nella tua domanda, in modo che siano facili da leggere per noi, quindi la tua domanda sarà ancora significativa dopo la morte del collegamento pastebin. – jalf

risposta

0

Ti è mai costruire il progetto con la versione precedente? stdafx.h è il nome dell'intestazione precompilato standard per i progetti msvc. Se hai costruito con VS2008, potrebbe aver creato l'intestazione precompilata e forse VS2010 lo sta raccogliendo. (Se non hai familiarità, un'intestazione precompilata è l'output generato generato dal compilatore che viene tenuto in giro per accelerare la compilazione dei file di intestazione la prossima volta che lo fai.)

Proverei a pulire, quindi un'ispezione manuale della directory del progetto (e crea la directory di output se è in una posizione non ovvia), quindi una compilazione completa. Se ciò non risolvesse il problema, eliminerei le intestazioni precompilate (almeno temporaneamente) nelle impostazioni del progetto e ricostruirò.

+0

Non ho mai costruito questo progetto con una versione precedente, è un nuovo progetto, ho provato a pulirlo e poi ricreato senza intestazioni precompilate ma gli stessi problemi si verificano – user112771

0

Try Change Progetto-> Proprietà -> proprietà di configurazione -> Generale -> set di caratteri da "Usa Multi-Byte Character Set"

+0

Ho letto quella soluzione da qualche parte, considerava le persone che usavano un vecchio standard modo utilizzando "int main()" invece di "int _tmain" e tale , non solo che ho usato "_tmain" ma ho anche provato a modificare quell'impostazione che non risolveva il problema – user112771

+0

se si esegue su XP, c'è un bug di installazione di beta 1 su XP. si prega di verificare se si dispone di questa scheda delle proprietà: "Microsoft.Cpp.Win32.User". In caso contrario, prova questo link: http://blogs.msdn.com/vsproject/archive/2009/07/07/vc-directories.aspx –

4

qualcosa che non va con il tuo percorso di inclusione. Utilizzare l'opzione "/ showInclude" ("Proprietà di configurazione/C/C++/Avanzate/Mostra include" nelle opzioni di progetto dell'IDE) per vedere quali intestazioni vengono incluse da dove.

Vedere questa domanda per maggiori dettagli:

+0

/showInclude l'opzione, in generale, sulle migliori cose che ti vengono in mente questo tipo di problemi –

0

Dopo aver aggiunto il parametro/showincludes ho ottenuto il seguente risultato:

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 

Che avrebbe senso che per alcuni perché carica i due file dal percorso DDK e non il VS2010 include dir, se questo è in realtà il problema come faccio a Sarà per usare il percorso corretto?

24

Il problema è qui: C: \ WinDDK \ 6001,18 mila uno \ inc \ api \ sal.h

sal.h definisce le annotazioni, che vengono utilizzati nelle intestazioni CRT ... Il DDK include la sua possedere sal.h, che è obsoleto e non contiene tutte le annotazioni.

Esistono 2 possibili soluzioni: - modificare i percorsi di inclusione in modo che "C: \ Programmi \ Microsoft Visual Studio 10.0 \ VC \ include" venga prima di "C: \ WinDDK \ 6001.18001 \ inc \ api"

  • basta eliminare "C: \ WinDDK \ 6001,18 mila uno \ inc \ api \ sal.h" :)
+0

Grazie mille per l'alternativa 2. I miei percorsi sono già come descrivi, ma il problema rimane. Rimozione sal.h lo ha fatto! – AnnaR

+3

Sono stato in grado di utilizzare il metodo uno. L'origine del DDK include è il foglio di proprietà ereditato "Microsoft.Cpp.Win32.User". Ciò ha aggiunto il _prima_della DDK all''errata '$ (VCInstallDir) include'. Per risolvere il problema, aggiungi un extra '$ (VCInstallDir) include 'nel foglio" Microsoft.Cpp.Win32.User "prima del DDK. – MSalters

1

Ho scoperto che la mia includono directory è stata inheritting dal genitore o Il problema è che in VS2010 sono state rimosse le opzioni globali per i percorsi di inclusione. Dopo alcune ricerche, ho scoperto che i due file che contenevano queste impostazioni (Dalla mia installazione precedente di VS) erano nella seguente directory:

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

I due file sono:

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

Modifica l'INCLUDEPATH variabile

Rimuovere il Percorso DDK, salvato il file e riavviato VS2010. Questo ha risolto il mio problema per tutti i nuovi progetti.

1

Sì, cambiare user.prop funziona, ma che strano! Non è possibile modificare questa impostazione da un menu in Visual Studio e non è possibile sovrascriverlo nelle proprietà del progetto. Anche se si cancella l'impostazione semplicemente inserendo $ (IncludePath), tuttavia utilizza il percorso predefinito per il DDK.

1

oppure è possibile aggiungere, $(VSInstallDir)\VC\include\sal.h all'impostazione include forzata nelle impostazioni avanzate C++. Questo costringerà la linea #include <sal.h> allo #include "sal.h" in modo efficace ma molto meno distruttivo. costringendolo a utilizzare la cartella corrente anziché i percorsi di sistema di inclusione.

6

Basta usare '$ (IncludePath); C: \ WinDDK \ 6001.18001 \ inc \ api' come include le directory.

+0

grazie - ha funzionato per me – jolyon

1

Ho lo stesso problema, è possibile copiare sal.h da Microsoft Visual Studio 10.0\VC\include a WinDDK\7600.16385.1\inc\api\ e copiare Microsoft Visual Studio 10.0\VC\include\CodeAnalysis a WinDDK\7600.16385.1\inc\api\.

3

Ho avuto lo stesso problema dopo l'aggiunta del percorso della directory DDK nelle pagine delle proprietà del progetto sotto

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

Dopo aver modificato la posizione in

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

e aggiungendo il percorso del DDK dopo $ (IncludePath) tutto ha funzionato bene.

Juriy Petrochenkov era sulla strada giusta con la sua osservazione, quindi ho ricontrollato dove ho aggiunto la directory DDK, e, ecco, era quella sbagliata. Grazie Juriy!

0
  1. Per evitare errori MFC, WTL e ATL.

Goto C/C++ General “includere ulteriori Directory” $ (SystemDrive) \ Programmi \ Microsoft Visual Studio 9.0 \ VC \ include

  1. Errore macro di default di Windows. Se tutte le finestre relative problema macro come il seguente IN, _IN_OPT_ e OUT Goto C/C++ Preprocessor “Ignora standard di percorso include” YES
Problemi correlati