【问题标题】:Visual Studio 2010 C++ Intellisense errorVisual Studio 2010 C++ 智能感知错误
【发布时间】:2015-03-02 22:04:13
【问题描述】:

我在 VS 2010 中遇到了一个奇怪的 Intellisense 错误。我在互联网上搜索了没有运气。似乎没有其他人之前遇到过这个错误。

IntelliSense: PCH warning: header stop needs to be at global scope. 
An intellisense PCH file was not generated.

在停止索引时出现许多其他错误。我最近添加的文件会发生这种情况。我的项目中有很多文件(278 个),最近的 5-6 个文件都发生了这种情况。可能是我做了一些它不喜欢的事情,或者可能存在限制。

由于我什至在文档中都找不到此错误,因此我想了解原因以及可能的解决方案。请注意,我试图删除 ipch 文件夹和 sdf 文件以使它们生成一个新的。错误出现在文件的最后一行。我的代码大量使用模板。

编辑:
我注意到我的 ipch 文件夹大部分是空的。这可能意味着整个预编译头生成失败,而不是那些文件。尽管如此,智能感知仍然可以部分工作,但不适用于这些文件。

【问题讨论】:

  • 我使用 VS 2008,这可能有所不同,但对我来说,Intellisense 数据库存储在 NCB 文件中。删除通常可以解决我的 Intellisense 问题。
  • 他们用 VS2010 改变了整个系统,现在它依赖于预编译的头文件并使用 mssql 数据库来存储条目。通常 ipch 文件夹占用 100mb 以上,现在几乎是空的。
  • 您使用 Visual Studio 2010 Professional (DreamSpark 版本) SP1 Beta 吗?
  • 那里提供的解决方法都不适合我。

标签: visual-studio-2010 visual-c++ intellisense


【解决方案1】:

当您忘记“;”时会生成此错误在类声明之后,例如:

#ifndef _MYCLASS_H
class MyClass {
...
public:
...
}

#endif <--- VS2010 report here the error PCH: warning...

如果你放一个“;”在关闭“}”之后,错误消失了。我并不是说这是唯一的原因,我只是说我发现缺少“;”的错误在提到的地方。

【讨论】:

    【解决方案2】:

    PCH 代表“预编译头”——您需要确保这些配置正确。

    错误消息似乎是说配置为“停止”预编译标头的标头正在以嵌套方式包含(即,其他一些标头包含它)。默认情况下,解决方案将使用stdafx.h 作为“停止”标头,并且习惯用法是stdafx.h 将是任何.cpp.c 文件中包含的第一个标头。不要在任何其他标题中包含stdafx.h

    有关 Intellisense 工作原理和故障排除方法的最佳信息来自 Visual C++ Team Blog

    一些可能有用的文章:

    【讨论】:

    • 我的项目没有使用 pch 但智能感知使用它。它为它创建文件夹,但它完全是空的。
    • 可能我有一个递归包含。这值得调查。编译指示保护得到一个编译错误,但智能感知可能会忽略它们。
    • 有没有办法获得更多关于智能感知的日志信息?就像它试图解析的文件列表一样。
    • 我已经更新了答案以包含一些指向文章的指针,这些文章提供了一些可能对您有帮助的 IntelliSense 详细信息。看来打开预编译的标头可能会帮助您解决此问题。
    • 我不熟悉 GCC 的预编译头文件支持是如何工作的。另一方面,您可以通过使用/FI 选项(IDE 项目设置中的“高级/强制包含文件”)在 100 个文件中添加#include
    【解决方案3】:

    我最初的感觉是这可能是一个文件编码问题,但无论如何,我将如何解决它......

    创建一个全新的解决方案,智能感知有效吗?如果没有,那么可能需要重新安装 VS。

    如果智能感知在不同的解决方案中工作,那么有两种可能性:您的解决方案中有问题,或者您的文件夹层次结构中有问题(可能是权限?)

    我会删除整个解决方案文件夹并从源代码管理中获取最新的。

    如果在那之后它仍然发生并且你真的想找到原因,那么你可以从项目中删除大量文件,看看智能感知现在是否有效,再删除一些......直到a)你用完文件或 b) 您找到导致错误的文件。

    如果 a) 则创建一个全新的解决方案并将您的文件和项目添加到其中。如果可行,请将您的新解决方案/项目文件与旧文件进行比较,看看有什么不同。

    如果 b) 则重新添加文件并开始修剪,直到找到违规行。

    【讨论】:

    • 它会在两台与 svn 同步的不同计算机中创建相同的错误。所有其他项目都运行良好。我猜你的蛮力方法需要一些时间(278 个文件超过 40k 行代码)。至少我知道问题发生在最后几个文件之后。可能值得一试。
    • 我现在正在探索另一种选择。我已经安装了 Visual AssistX。我禁用了智能感知。目前看来还可以。一旦我确定它 100% 有效,我可能会立即购买。