2013-07-02 11 views
9

Ho l'errore comune fatal error C1083: Cannot open include file: 'afxres.h': No such file or directory. I motori di ricerca mostrano molti colpi per questo, ma nessuna delle soluzioni suggerite funziona per me.Visual Studio 2012: il compilatore C++ ignora le directory di inclusione specificate dall'utente

Normalmente questo sembra essere un problema con i percorsi. Quindi, ho assicurato che le librerie pertinenti fossero installate e localizzammo il file. Utilizzando il percorso assoluto come il # include funziona bene:

#include "C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\atlmfc\include\afxres.h"

Ma, se aggiungo la directory (C: \ Program Files (x86) \ Microsoft Visual Studio 11.0 \ VC \ atlmfc \ include) al impostazioni del progetto (o di foglio di proprietà Microsoft.Cpp.Win32.User), e provare questa linea:

#include "afxres.h"

ottengo l'errore C1083 nuovo. Eppure Visual Studio può trovare chiaramente il file - se clicco con il tasto destro sul nome del file e seleziona "Apri documento 'afxres.h'", quindi lo apre immediatamente!

Perché Visual Studio deve ignorare il percorso #include che ho specificato? Altri #include percorsi che ho incluso in un modo simile funzionano perfettamente.

Directory is explicitly included in the build settings

+0

Per quanto ne so afxres.h dovrebbe essere specifico per l'applicazione; non è una libreria standard inclusa, è generata per usare le risorse nel tuo progetto – HLL

+0

Impossibile testare come non sono in Windows in questi giorni, ma prova ** Strumenti> Opzioni> Directory ** –

+1

@hll 'afxres.h 'è incluso con MFC. –

risposta

4

ma ho avuto Visual C++ 2010 Express su qui in passato, dal quale sembra aver importato alcune impostazioni

Questo è stato il commento essenziale. Express non supporta ATL e MFC. Ciò che manca ancora è che hai riscontrato questo problema solo sui progetti che hai avviato in precedenza su VS2010.

Si noti che l'aggiunta del percorso come si faceva nella finestra delle proprietà del progetto non era necessaria. Visibile nella schermata, è già coperto dalla voce $(VCInstallDir)atlmfc\include nelle proprietà ereditate. Quindi la conclusione da trarre è che il valore della macro $ (VCInstallDir) è sbagliato.

A causa di un errore di installazione o di un registro whacked, ciò può verificarsi quando si converte un progetto avviato in precedenza in VS2010. Passare dal Property Manager alla finestra Solution Explorer, fare clic con il tasto destro del mouse sul progetto, Proprietà, Pagina generale. Modificare l'impostazione "Set di strumenti della piattaforma" da v100 a v110. Ora utilizzerai le directory di inclusione di VS2012 invece di quelle di VS2010 Express.

Fare attenzione che le modifiche alla finestra delle proprietà del progetto Microsoft.Cpp.Win32.User interesseranno tutti i progetti, sarà necessario reimpostarlo.

+0

Hans, penso che tu stia esagerando un po 'le cose. e link bene, tutto quello che ho cambiato in quella scheda delle proprietà è di aggiungere 2 directory che ho bisogno di trovare in tutto il mondo. Dal momento che non stava trovando l'header MFC, questo sembrava un posto utile per dirlo, si dovrebbe essere globalmente accessibile. – Kylotan

+0

E posso confermare che la rimozione delle directory di inclusione aggiuntive, che è tutto ciò che ho mai modificato, tra l'altro, non risolve il problema. – Kylotan

+0

... e non sostituisce il mio file con la tua versione. Questa è una nuova installazione di VS2012 (ad esempio, installata 2 giorni fa) ma Visual C++ 2010 Express era già presente in precedenza, dal quale sembra aver importato alcune impostazioni. – Kylotan

1

In primo luogo, assicurarsi che MFC è attivata in proprietà del progetto> Proprietà di configurazione> Generale

utilizzo di MFC deve essere impostato su libreria statica o dinamica.

in secondo luogo, al fine di garantire che cl.exe sta usando tutte le includere le directory che si specifica, è necessario andare a proiettare immobili> C/C++> Generale e modificare sopprimere avvio banner per no/nologo-

questo ti darà il comando cl completo per ogni file sorgente, mostrando esattamente cosa lo studio visivo sta tentando di fare con il codice e le opzioni di configurazione che gli dai.

es.cl /c /ZI /nologo- /W3 /WX- /Od /Oy- /D WIN32 /D _DEBUG /D _CONSOLE /D _UNICODE /D UNICODE /Gm /EHsc /RTC1 /MDd /GS /fp:precise /Zc:wchar_t /Zc:forScope /Yc"StdAfx.h" /Fp"Debug\test.pch" /Fo"Debug\\" /Fd"Debug\vc100.pdb" /Gd /TP /showIncludes /analyze- /errorReport:prompt stdafx.cpp

Se si utilizzano le cartelle di inclusione extra, nella riga di comando dovrebbero essere presenti molti altri commutatori -I.

Problemi correlati