我最近想开始为一个开源 C++ 项目做贡献。由于对 C++ 的经验很少,我选择了 Visual Studio 作为 IDE,并使用 SP1 进行了更新。我得到了相对容易构建的解决方案,并且想稍微浏览一下代码以获得概览。
这是我注意到有时“转到定义”/“转到声明”不起作用的时候。当我右键单击源代码中的符号时,这两个选项都可用,但是当我在头文件中时,“转到定义”只会让我再次进入相关函数的声明。当我在 .cc 文件中时,我总是被带到同一个文件中的定义。
关于与此相关的功能,我注意到的其他一些事情是:
1)对于某些功能,我可以从头文件导航到定义,但是另一个方向被破坏了
2) 如果将声明更改为完全匹配定义,则可以修复某些函数的导航,例如
header declaration:
void buche(sint64 betrag, player_cost type);
source definition:
void karte_t::buche(sint64 const betrag, player_cost const type)
改成
header declaration:
void buche(sint64 const betrag, player_cost const type);
-> 导航双向工作
3)当点击源文件中相关函数的代码块时,顶部的范围菜单变为“(全局范围)”而不是显示右侧的小箭头(这是前向声明的符号 I认为?)和类名(但这些函数绝对是类成员)
我搜索了很多,这似乎是一个相对知名的问题。网站上有一个线程:如何让 IntelliSense 在 Visual Studio 2008 中可靠地工作
我还在微软论坛上找到了几个线程(我无法链接,因为我只能发布两个超链接),但没有官方确认错误或其他内容。
我发现的答复的精髓是应该删除 .ncb 文件(据我了解,该文件已被 VS2010 中的 .sdf 数据库取代),或者使用选项在加载解决方案时重建数据库。我都做了很多次,没有用。Stackoverflow 上该线程上评分最高的回复似乎暗示这只是一个错误(Intellisense 的 - 我是否理解正确,它是这个自动完成组件也负责代码导航?)必须接受,建议使用视觉辅助取而代之的是,当时的问题是关于 VS2008 的,一个回复指出 VS2010 在这方面有所改进。另一个回复归咎于递归引用,但我认为这在这个项目中不是问题,因为所有文件(当然是我检查过并遇到问题的少数文件)都包含保护。该项目的一位编码员也向我证实,他也有同样的问题。但我并不是那么热衷于在 Visual Assist 上花钱,它只是为了一个小爱好......
拥有丰富的 Eclipse/Java 经验,对我来说,这样一个相对重要的 IDE 特性不能可靠地工作对我来说似乎很奇怪。当然我可以理解,静态代码分析对于 C++ 来说比对于 Java 来说要困难得多。但话又说回来,Visual Studio 是一个商业产品,它有很多开发周期。
所以总结这篇文章,这是一个不可避免的错误吗?