2010-05-31 16 views
5

Quando aggiungo una guardia includere nel mio file di intestazione per un progetto di Visual C++, mi dà il seguente avviso ed errore:problema con includono guardia

warning C4603: '_MAPTEST_H' : macro is not defined or definition is different after precompiled header use

Add macro to precompiled header instead of defining here

.\MapTest.cpp(6) : use of precompiled header** // the precompiled header stdafx.h is included in this line

.\MapTest.cpp(186) : fatal error C1020: unexpected #endif

ma quando aggiungo l'intestazione precompilata prima della includono guardia , nessun avvertimento o errore viene emesso. Qual è la ragione di questo?

+0

Puoi pubblicare la quantità minima di codice che riproduce questo problema? –

+2

Gli identificativi che iniziano con un trattino basso e sono seguiti da un altro trattino basso o una lettera maiuscola sono riservati, non li usano. – GManNickG

+0

#ifndef _MAPTEST_H #define _MAPTEST_H #include "stdafx.h" _MAPTEST_H è il nome della guardia di inclusione. Quando inserisco l'intestazione precompilata prima della definizione della macro, funziona bene. – Izza

risposta

17

due problemi mi viene in mente:

  1. Secondo this, Visual C++ sarà non compilare nulla prima della riga in cui si include stdafx.h - in modo che la linea deve essere il primo in assoluto nel file . Se lo metti dopo la definizione della macro, viene saltato, quindi gli errori che stai vedendo.

  2. Gli identificativi che iniziano con un carattere di sottolineatura iniziale e una lettera maiuscola (o due trattini bassi di sottolineatura) sono riservati, il che potrebbe causare un conflitto di nomi. vedi this answer per maggiori dettagli.

+0

Grazie per l'aiuto :) – Izza

+0

Prego. :) – tzaman

2

Prova ad aprire stdafx.cpp e aggiungi lì la tua definizione di macro! Spero che il tuo problema sia risolto

+0

Questo rispecchia l'essenza della risposta accettata di 4 anni fa, quale valore aggiunto c'è in questo? – EWit