预编译标头 IntelliSense 错误

Posted

技术标签:

【中文标题】预编译标头 IntelliSense 错误【英文标题】:Precompiled Headers IntelliSense Error 【发布时间】:2013-09-11 10:51:22 【问题描述】:

我在我正在处理的静态库项目中启用了预编译头文件。环顾其他 *** 问题,#include "stdafx.h" 的关键位置似乎在 .cpp 文件中,而不是 .h 文件中。

但是,当我在 Visual Studio 中执行此操作时,出现 IntelliSense 错误:

1 IntelliSense:PCH 警告:标头停止不能在宏或 #if 块中。未生成 IntelliSense PCH 文件。 ....\Common\Core\Geometry\Ellipsoid.h 9

静态库项目确实编译成功,即使出现此 IntelliSense 错误。

.h 文件由此类声明组成:

#ifndef GEOMETRY_ELLIPSOID_H
#define GEOMETRY_ELLIPSOID_H

class Ellipsoid  // 'class' is underlined with a red line (error)
    // ...
;

#endif // !GEOMETRY_ELLIPSOID_H

.cpp 定义了在头文件中声明的类:

#include "Common\Core\stdafx.h"
#include "Ellipsoid.h"

// ...

通过在标头中包含 stdafx.h,智能感知错误消失。这是使用预编译头文件的正确方法吗?在标头中包含 stdafx.h 有什么影响?

【问题讨论】:

这不完全是您问题的解决方案,但在 Visual Studio 中,我转到项目属性 -> C/C++ -> 高级并将我的 PCH 作为强制包含,然后不用担心再来一次! 【参考方案1】:

您必须在文件开头添加一次#pragma 答案在这里:PCH Warning: header stop cannot be in a macro or #if block - Visual C++ 2010 Express SP1 macro-or-if-block-visual-c-2010-exp

【讨论】:

以上是关于预编译标头 IntelliSense 错误的主要内容,如果未能解决你的问题,请参考以下文章

在 ac-docker win10 中编译时出现构建错误,要求重建已编译的标头,因为自预编译标头以来文件已被修改

未能发出预编译的标头

如何使用 g++ 包含预编译的 .h.gch 标头

iOS 和 OS X 目标的通用预编译标头

无法为本地pod框架桥接标头发出预编译头

理解问题:预编译的标头和包含用法