7

我在 VS2010 中有一个带有 Qt 4.7.4 的 c++ 项目,我经常遇到 IntelliSense 问题(就像我们都做的那样......)。一个特定的问题是有时无法找到函数体(在 .cpp 文件中)。如果我单击该函数体,下拉框(通常显示您所在的函数)为空。

今天,我在添加一条foreach()语句(Qt 宏 Q_FOREACH)后立即注意到了这种行为。然后我用相应的宏替换了 foreach() 宏,for(int i = 0; i < ...)IntelliSense立即再次显示了该函数。

所以我想知道:

  1. 有人可以验证这种行为并在评论中告诉我吗?
  2. 为什么会这样?
  3. 是否有让我继续使用 Q_FOREACH 的解决方法?
4

1 回答 1

8

您必须使用“cpp.hint”文件的概念。

基本上,您必须将麻烦的宏放入名为“cpp.hint”的文件中,并将该文件放入您的解决方案目录(这对我不起作用 - 可能是非标准项目布局)或您的代码所在的父目录文件驻留。(为我工作)

在该文件中,您只需将麻烦的宏放在右侧,因此在您的情况下:

#define foreach()

或者更好

#define Q_FOREACH(variable, container)
#define foreach(...)
etc.

注意,在将定义放入 cpp.hint 文件后,您可能必须重新扫描或重新启动或摆弄一个功能才能设置效果。

更新:确实,我刚刚发现,我必须对 .cpp 文件进行一些更改(例如添加新行)才能生效。修复不会自动应用。

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

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

微软原文说你可以使用“从源文件的根目录到包含源文件本身的目录的路径”中的任何目录。在典型的Visual C++项目中,根目录包含解决方案或项目文件。 "

您可以在“C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcpackages”中找到主“cpp.hint”文件以供参考

于 2014-02-07T07:58:31.433 回答