Visual Studio C++ 2005-2013 中的智能感知缺少函数定义

Posted

技术标签:

【中文标题】Visual Studio C++ 2005-2013 中的智能感知缺少函数定义【英文标题】:Function definitions missing from intellisense in Visual Studio C++ 2005-2013 【发布时间】:2014-01-31 12:34:54 【问题描述】:

以下问题困扰了我一个项目很长时间:

一些函数定义(来自 .cpp 文件)从智能感知中排除/隐藏!

这些功能无法“转到定义”,导航栏中也没有列出。

不过,这些函数确实出现在自动完成列表中。问题仅适用于 .cpp 文件,.h 文件解析得很好。 “Goto Declaration”也有效。

自 2005 年以来也是如此,对于每一个新版本,我都希望能得到修复,但似乎并没有被其他人视为错误。

更新: 我已将其归结为以下几点:intellisense 无法识别包含某个宏的所有函数。原来的宏是

#define forlist(x,list) for( auto x= list.begin(); x.valid(); ++x)

但你也可以使用简化的测试用例

#define fortest(x)  for( auto x= 1; x< 2; ++x)

void myclass::TestFN()

    fortest( g )
    
        g;
    

下一步是寻找解决方法(或尝试通过 micrsoft 错误报告)。

请不要对这个宏说太多。这是我无法更改的列表实现的现有代码。我可以不使用宏,但我仍然认为这是一个 VS 错误。

一个有趣的事情是,以下(真的 ***ic 宏)可以正常工作:

#define fortest(x)  for( auto x= 1; x< 2; ++x) 

void myclass::TestFN()

    fortest( g )
        g;
    

会不会是智能感知将案例 1 视为非法的局部函数定义? (见http://connect.microsoft.com/VisualStudio/feedback/details/781121/c-intellisense-mistakes-loop-expression-for-function-definition)

下面的工作也很好

#define fortest(x)  for( auto x= 1; x< 2; ++x)

void myclass::TestFN()

    fortest( g )
        g;

【问题讨论】:

您是否尝试过此处提到的修复:***.com/questions/2500674/…? 1.您提到的“修复”包括重新启动/清理/重建智能感知。在过去的几年里,我已经这样做了大约 2300 次,但没有帮助 ;o) 2. 我不想重置我所有的 VS 设置。无论如何这不可能是VS设置问题,因为其他项目工作正常。 所以你有一个项目一切正常,而另一个项目 intellisense 碰巧错过了一些功能,你确定这是一个错误或什么,而不是某种项目损坏?那么我不会问你是否从头开始重建项目,因为你可能已经这样做了大约 1700 次。 你在寻求帮助,但不是那种对你没有帮助的帮助。您想知道解决您问题的具体事物,对吧? @TobiMcNamobi 可能每 10.000 名程序员中就有 1 人遇到同样的问题,而且可能每 100 名程序员中就有 1 人足够聪明地解决了这个问题。所以我准备等待...... 【参考方案1】:

像往常一样,几个小时后对我的问题的兴趣减弱了,所以我不得不自己弄清楚......

我们只需要使用cpp.hint文件的概念。

基本上,您必须将麻烦的宏放入名为 cpp.hint 的文件中,然后将该文件放入您的解决方案目录中(这对我不起作用) 或者在您的代码文件所在的父目录中。(为我工作)

在那个文件中,我们只是把麻烦的宏放在右边,所以例如:

#define forlist(x,list)

注意:您必须重置 IntelliSense 缓存才能使用更改后的 cpp.hint 文件中的新数据。你应该:

删除ipch文件夹(通常放在Solution文件夹中)。 删除解决方案文件夹中的所有 *.sdf 文件。 删除解决方案文件夹或ipch 文件夹中的所有*.VC.db 文件。

对于更高级的宏(例如为代码块设置“开始”和“结束”宏),还有一些其他技巧。

原文链接为: http://msdn.microsoft.com/en-us/library/dd997977.aspx

问题的原因是,如果 Intellisense 必须解析项目中的所有宏,它的性能会(可能)显着下降,因此它只解析在“cpp.hint”中明确给出的那些。

【讨论】:

我刚刚发现,我必须对每个 .cpp 文件进行一些更改(例如添加新行)才能生效。修复似乎不会自动应用。 谢谢你让我大开眼界!但是对我来说它是这样工作的:复制你想要的所有定义的宏并将 cpp.init 文件放在解决方案所在的主目录中!

以上是关于Visual Studio C++ 2005-2013 中的智能感知缺少函数定义的主要内容,如果未能解决你的问题,请参考以下文章

如何只用visual c++编译器而不安装visual studio

将 C++ 项目从 Visual Studio 2008 转换为 Visual Studio 2010

如何只用visual c++编译器而不安装visual studio

如何在visual studio2008中创建,编译和运行C++程序,

Microsoft visual c++弹窗?

我可以在 Visual Studio 2008 中使用 Visual Studio 6 编译的 C++ 静态库吗?