Izza
Izza

Reputation: 2419

Problem with include guard

When I add an include guard to my header file for a Visual C++ project, it gives me the following warning and error:

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

but when I add the precompiled header before the include guard, no warning or error is emitted. What is the reason for this?

Upvotes: 6

Views: 7151

Answers (2)

Sparsh Jain
Sparsh Jain

Reputation: 21

Try opening stdafx.cpp and add your macro definition there! I hope your problem is solved

Upvotes: 2

tzaman
tzaman

Reputation: 47840

Two problems I can think of:

  1. According to this, Visual C++ won't compile anything before the line where you include stdafx.h - so that line needs to be the very first one in the file. If you put it after the macro definition, it gets skipped, hence the errors you're seeing.

  2. Identifiers starting with a leading underscore and a capital letter (or double leading underscores) are reserved, which might be causing a name conflict. see this answer for more details.

Upvotes: 19

Related Questions