C++ 智能感知包括不应该';不包括在内

C++ 智能感知包括不应该';不包括在内,c++,windows,visual-studio-2010,intellisense,C++,Windows,Visual Studio 2010,Intellisense,我正在VisualStudio2010中从事一个项目。我的项目不应该局限于Windows,但是,其中一个文件依赖于操作系统 因此,我在.cpp文件中只有一个文件中包含了。没有其他文件包含此.cpp文件。因此,从逻辑上讲,windows.h头应该对解决方案的其余部分不可见 这意味着,除了那一个.cpp,我的项目在所有文件中都不会与Windows库中的声明有任何名称冲突,并且我的项目编译得很好 然而,IntelliSense坚持认为我有名字冲突。当我按下Ctrl+Space时,IntelliSens

我正在VisualStudio2010中从事一个项目。我的项目不应该局限于Windows,但是,其中一个文件依赖于操作系统

因此,我在.cpp文件中只有一个文件中包含了
。没有其他文件包含此.cpp文件。因此,从逻辑上讲,
windows.h
头应该对解决方案的其余部分不可见

这意味着,除了那一个.cpp,我的项目在所有文件中都不会与Windows库中的声明有任何名称冲突,并且我的项目编译得很好

然而,IntelliSense坚持认为我有名字冲突。当我按下
Ctrl+Space
时,IntelliSense会从
windows.h
中建议标识符。这就是
windows.h
应该不可见的范围

有什么设置可以让我改变来阻止这种恼人的行为吗


我100%肯定问题不在于我的解决方案的结构,因为如果我在项目的另一部分中使用已在
windows.h
中定义的标识符,编译器不会识别它,也不会编译…但IntelliSense会识别它

引用微软VC++员工安迪·里奇(Andy Rich)在这篇博客文章中的评论:

浏览数据库将查找以某种方式包含在项目中的所有源文件,这些源文件可以是直接包含的,也可以是其他#include指令的结果。这是不可配置的,并且是IDE能够提供准确答案所必需的


因此,不幸的是,答案是否定的,除了完全禁用IntelliSense之外,你无能为力。

引用在VC++上工作的微软员工安迪·里奇(Andy Rich)在这篇博客文章中的评论:

浏览数据库将查找以某种方式包含在项目中的所有源文件,这些源文件可以是直接包含的,也可以是其他#include指令的结果。这是不可配置的,并且是IDE能够提供准确答案所必需的


因此,不幸的是答案是否定的,除了完全禁用IntelliSense之外,您没有什么可以做的。

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


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

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


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

我听说在MSVC10中,他们重写了intellisense,使其不会延迟。我的测试表明它只是更好。@MooingDuck:它一点也不聪明!我希望在VisualStudio2011中效果更好。我听说在MSVC10中,他们重写了intellisense,使其不致于弱智。我的测试表明它只是更好。@MooingDuck:它一点也不聪明!我希望在VisualStudio2011中会更好。在我看来,这听起来像是一个可怕的设计决定。不过,感谢您提供的快速信息。:)在我看来,这听起来像是一个可怕的设计决定。不过,感谢您提供的快速信息。:)