智能感知包括不应包含的内容

时间:2011-10-05 19:53:23

标签: c++ windows visual-studio-2010 intellisense

我正在使用Visual Studio 2010中的项目。我的项目不应限于Windows,但其中一个文件依赖于操作系统。

出于这个原因,我只有 .cpp 文件的一个 #include <windows.h>。没有其他文件包含此 .cpp 文件。因此,从逻辑上讲,windows.h标题应该对解决方案的其余部分不可见。

这意味着我所有文件中的Windows库中的声明都没有名称冲突,但是 .cpp ,并且我的项目编译得很好。

但是,IntelliSense坚持认为我有名称冲突。当我按Ctrl+Space时,IntelliSense会建议来自windows.h的标识符。这是windows.h应该不可见的范围!

我可以改变一个设置来阻止这种恼人的行为吗?

我100%肯定问题不在于我的解决方案的结构,因为如果我在项目的另一部分中使用windows.h中已经定义的标识符,则编译器无法识别它并且它没有编译......但IntelliSense认出它!

2 个答案:

答案 0 :(得分:2)

引用Andy Rich,一位从事VC ++工作的微软员工,来自对此博客文章的评论:Troubleshooting Tips for IntelliSense Slowness

  

浏览数据库将直接或作为其他#include指令的结果找到项目中包含的所有源文件。这是不可配置的,并且是必要的,以便IDE能够提供准确的答案。

所以很遗憾答案是否定的,除了完全禁用IntelliSense之外,你无能为力。

答案 1 :(得分:1)

由于IntelliSense适用于每个项目的基础(.vcproj),而不是每个解决方案(.sln),因此简单的答案是将Windows特定的部分移动到解决方案中的自己的项目中。

这也有助于移植,因为您可以更轻松地替换Windows特定的部分。