2010-05-31 109 views
5

当我添加一个包括后卫为Visual C++项目我的头文件,它给了我下面的警告和错误:问题与包括后卫

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

,但是当我添加预编译的头前,包括后卫,不会发出警告或错误。这是什么原因?

+0

你能发表最少量的代码来重现这个问题吗? – 2010-05-31 06:31:55

+2

以下划线开头并且后面跟着另一个下划线或大写字母的标识符被保留,请勿使用它们。 – GManNickG 2010-05-31 06:35:17

+0

#ifndef _MAPTEST_H #define _MAPTEST_H #include“stdafx.h” _MAPTEST_H是包含名称。当我在宏定义之前放置预编译头时,工作正常。 – Izza 2010-05-31 06:36:15

回答

17

两个问题,我能想到的:

  1. this,Visual C++会不会在那里你包括stdafx.h前行编译任何东西 - 所以该行必须是文件中的第一个一个。如果你把它放在宏定义之后,它会被跳过,因此你看到的错误。

  2. 保留可能会导致名称冲突的以下划线和大写字母(或双前导下划线)开头的标识符。有关更多详细信息,请参见this answer

+0

谢谢你的帮助:) – Izza 2010-05-31 06:41:35

+0

不客气。 :) – tzaman 2010-05-31 07:05:57

2

尝试打开stdafx.cpp并在其中添加您的宏定义! 我希望你的问题解决了

+0

这反映了4年前被接受的答案的本质,这是什么增值? – EWit 2014-12-05 09:13:23