包含警卫的问题

时间:2010-05-31 06:26:36

标签: c++ visual-c++ inclusion

当我在我的头文件中为Visual C ++项目添加一个包含保护时,它给了我以下警告和错误:

  

警告C4603:'_ MAPTEST_H':宏未定义或预编译头使用后定义不同

     

将宏添加到预编译的头文件而不是在此定义

     

。\ MapTest.cpp(6):使用预编译头** //预编译头stdafx.h包含在此行中

     

。\ MapTest.cpp(186):致命错误C1020:意外#endif

但是当我在include guard之前添加预编译头时,不会发出警告或错误。这是什么原因?

2 个答案:

答案 0 :(得分:17)

我能想到的两个问题:

  1. 根据this,Visual C ++不会在包含stdafx.h的行之前编译任何内容 - 因此该行必须是文件中的第一行。如果你把它放在宏定义之后,它会被跳过,因此你会看到错误。

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

答案 1 :(得分:2)

尝试打开stdafx.cpp并在那里添加宏定义! 我希望你的问题得到解决