Eclipse CDT「Open Type Hierarchy」显示旧类名及重复的原因与解决方法
这种情况我之前也踩过坑,本质就是CDT的索引缓存没跟上你的重构操作——毕竟手动改类名、移动类后,后台的类型索引还残留着旧的元数据,才会出现这些"幽灵"条目。试试下面这些步骤,基本能解决:
先清理项目构建缓存
右键你的项目 → 选择Project→Clean...,选中当前项目后点Clean。这一步会删掉旧的编译输出文件,避免旧的构建信息干扰索引。强制重建索引(最关键)
右键项目 →Index→Rebuild。这会让CDT彻底扫描所有源文件,重新生成最新的类型索引,旧的类名条目会被完全替换。如果Rebuild后还有残留,可以试试Index→Freshen All Files,或者Update with Modified Files,不过Rebuild是最彻底的选项。检查索引器设置(如果前两步无效)
打开Window→Preferences→C/C++→Indexer:- 确保
Enable indexer是勾选状态,并且索引器类型选的是Full Indexer(有些时候可能被改成了快速索引,会导致索引不完整)。 - 可以暂时关掉
Use heuristics to improve indexing performance,虽然索引速度会慢一点,但能减少索引遗漏的情况。
另外别忘了检查项目单独的索引设置:右键项目 →Properties→C/C++ General→Indexer,确保没有和全局设置冲突的地方。
- 确保
极端情况:手动删除索引文件
如果上面的方法都没用,那就直接动手清理索引文件。关闭Eclipse后,找到工作区的.metadata/.plugins/org.eclipse.cdt.core/目录,删掉对应项目的索引文件夹;也可以删掉项目根目录的.cproject文件(注意备份),重启Eclipse后重新导入项目并构建索引。
另外提个小建议:以后重构类的时候尽量用CDT自带的重构工具(右键类名 → Refactor → Rename/Move),而不是手动改代码和文件名,这样CDT会自动同步更新索引,基本不会出现这类残留问题。
内容的提问来源于stack exchange,提问作者DaveR

