有谁知道在 C/C++ 项目中工作时如何让 IntelliSense 可靠地工作?它似乎适用于大约十分之一的文件。Visual Studio 2005 似乎比 2008 好很多。
编辑:虽然不一定是解决方案,但此处提供的解决方法:
如何让 IntelliSense 在 Visual Studio 2008 中可靠地工作
如果我想要一个像样的 IntelliSense 系统,这可能是最好的选择。
有谁知道在 C/C++ 项目中工作时如何让 IntelliSense 可靠地工作?它似乎适用于大约十分之一的文件。Visual Studio 2005 似乎比 2008 好很多。
编辑:虽然不一定是解决方案,但此处提供的解决方法:
如何让 IntelliSense 在 Visual Studio 2008 中可靠地工作
如果我想要一个像样的 IntelliSense 系统,这可能是最好的选择。
本机 C++ 智能感知在任何版本的 Visual Studio 中都不能可靠地工作。我发现有两个常见的问题:
1) 头文件路径设置不正确。当您发现智能感知不起作用的类型时,请使用 IDE 单击每个头文件以查找包含该类型的头文件。(右键单击#include 并选择打开文档...)。如果在您到达声明类型的文件之前失败,那么这就是您的问题。确保正确设置了头文件搜索路径。
和,
2) 智能感知数据库已损坏。这事儿常常发生。您需要关闭解决方案,删除 .ncb 文件,然后重新打开解决方案。我在这里发布了我用来回答另一个问题的宏。
预处理器也可能会混淆智能感知 - 因此请确保构建期间的任何#defines 也可用于智能感知。除此之外,我不知道还有什么可以打破它。我没有看到前向声明有任何特殊问题。
我还意识到,在某个大型项目中,Intellisense 有时会“迷失”。为什么?不知道。
这就是我们购买Visual Assist(来自Tomato 软件)并通过删除 Visual Studio 子目录(C:\Program Files\Microsoft Visual Studio 8\VC\vcpackages)中的 dll feacp.dll 来禁用 Intellisense 的原因
这不是解决方案,只是一种解决方法。
对于我们这些无法获得视觉辅助的人来说,似乎有希望了:
您是否安装(或卸载)了任何加载项?我发现这会影响我的智能感知。
除此之外,只需确保您的工具->选项->文本编辑器->所有语言“自动列表成员”和“参数信息”被选中。
我不将 VS2008 用于 C++,仅使用 VB 和 C#,但我发现当智能感知停止工作时(对于 VS2003/2005/2008 来说是这样),这是因为项目/文件中的某些内容已损坏 - 通常是错误的参考或代码。
VB 和 C# 具有更好的智能感知支持,因为它能够反映引用的程序集来构建智能感知树。
C++ 必须遍历函数原型的包含文件,如果路径不正确,它将找不到所有原型头。
在那个糟糕的重构实用程序切碎了我的代码之后,我需要对 itellisense 进行修复。问题是一个包含自身#include 的类头文件。递归引用会破坏 itellisense。这种情况的一个症状是,如果 itellisense 可以看到其他类,但看不到当前类。还:
使用 #pragma once 消除重复的标头加载
如果项目现在需要更长的时间来加载,那么 itellisense 试图理解导致的冲突,然后缺乏完成支持。
通常只有一个类对象受到影响,这会向您显示要查看的文件(通常是标题)。
我有一个非常烦人的问题,智能感知只在一些文件中工作,没有任何明显的原因......我花了几个小时在谷歌上挖掘,但我终于明白原因确实是递归引用!我正在使用:
#ifndef CLASS_H
#define CLASS_H
...
#endif
以避免重新定义符号,这有时会破坏大型项目中的智能感知。
但是评论 ifndef-define-endif 并添加以下内容就足够了:
#pragma once
在头文件的开头仍然避免重新定义并让 Intellisense 再次工作 =)=)
至少,这对我有用,希望它有用......
干杯弗朗西斯科
我最近在 VS2008 中研究了 Intellisense,因为我正在开发一个相当大的 C++ 数值线性代数库,其中模板等被广泛使用。Intellisense 很快就停止了该项目的工作,我有点放弃了,但现在没有它变得非常烦人,所以我开始调查。这是我发现的:
假设有一个文件,包含“破坏”智能感知的代码,
#include
d,它仍然适用于其余文件#if 0
,/* .. */
或者//
似乎让 Intellisense 放心从我使用的 C++ 特性来看,实际上只有少数破坏了 Intellisense:
static_assert<(size > 0)>
)
static_assert<((size > 0))>
没有帮助)static_assert<0 < size>
有效)function<type>(args)
)
Matrix::MakeMatrixType<3, 3>::Result r;
似乎其中一些问题是由于某些“简化”解析造成的,它不如适当的 C++ 解析器强大。有了上述信息,一种使 Intellisense 在现有代码中工作的“可靠”方法:
void main() {}
。math.h
sin(
通过键入 eg并查看参数帮助是否弹出来测试 Intellisense 是否正常工作。有时,这会起作用,但会员帮助不会 - 所以也试试吧。我发现这种方式很容易查明产生问题的代码位置(我意识到这对于真正的大型项目可能是不可行的,在我的例子中,97 个文件中只有一个文件出现问题)。注意这里的“构建”是指编译,链接阶段不需要完成,所以未解析的外部是可以的,无论如何IS都应该更新。
更新 IS(除了构建)的另一种方法是保存所有内容、关闭工作区、删除 .ncb 文件并重新打开它。然后等待“正在更新 Intellisense ... (N)”从状态栏中消失(N 计数为零,如果它没有一直走下去,它会显示问题发生的进度)。我发现这相当乏味。
关于这个问题,我注意到一些有趣的事情(在 Visual Studio 2010 上):为了解决这个问题,我#include
在头文件中更改了 sintax,之前是(使用 VS 2005 完成的旧项目并使用 VS 2010 重新打开):
#include <myfile.h>
我用以下方法解决了这个问题:
#include "myfile.h"
智能感知后开始正常工作!我希望这能有所帮助!
我不得不重置设置...
C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE>devenv.exe /ResetSettings
问题出在 .vcproj 文件上。
你会发现如果你从调试模式切换到发布模式,构建,然后尝试智能感知,它通常可以工作。
关闭 Visual Studio。如果您在项目中搜索 .vcproj 文件,请编辑它们并搜索 AdditionalIncludeDirectories 的前两个实例。此值应类似于“..\,..\”而不是“../..”。
重新打开您的项目,让 Intellisense 完成构建,然后应该修复它。