【问题标题】:Problem with include guard包含保护的问题
【发布时间】:2010-05-31 06:26:35
【问题描述】:

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

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

将宏添加到预编译头而不是在这里定义

.\MapTest.cpp(6) : use of precompiled header** // 预编译头 stdafx.h 包含在这一行中

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

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

【问题讨论】:

  • 你能发布最小数量的代码来重现这个问题吗?
  • 以下划线开头后跟另一个下划线或大写字母的标识符是保留的,不要使用它们。
  • #ifndef _MAPTEST_H #define _MAPTEST_H #include "stdafx.h" _MAPTEST_H 是包含保护名称。当我将预编译的头文件放在宏定义之前时,工作正常。
  • 抱歉发帖不那么可读:(
  • @GMan:谢谢,好像是这样:)

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


【解决方案1】:

我能想到的两个问题:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2011-10-07
      • 2013-11-13
      • 1970-01-01
      • 1970-01-01
      • 2013-01-20
      • 1970-01-01
      • 2017-03-14
      • 2015-12-31
      • 2011-02-09
      相关资源
      最近更新 更多