当我在我的头文件中为Visual C ++项目添加一个包含保护时,它给了我以下警告和错误:
警告C4603:'_ MAPTEST_H':宏未定义或预编译头使用后定义不同
将宏添加到预编译的头文件而不是在此定义
。\ MapTest.cpp(6):使用预编译头** //预编译头stdafx.h包含在此行中
。\ MapTest.cpp(186):致命错误C1020:意外#endif
但是当我在include guard之前添加预编译头时,不会发出警告或错误。这是什么原因?
答案 0 :(得分:17)
我能想到的两个问题:
根据this,Visual C ++不会在包含stdafx.h
的行之前编译任何内容 - 因此该行必须是文件中的第一行。如果你把它放在宏定义之后,它会被跳过,因此你会看到错误。
保留以前导下划线和大写字母(或双前导下划线)开头的标识符,这可能会导致名称冲突。有关详细信息,请参阅this answer。
答案 1 :(得分:2)
尝试打开stdafx.cpp并在那里添加宏定义! 我希望你的问题得到解决