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