Visual Studio 2015中的IntelliSense在包含为头文件的.cpp文件中

3
在我的项目中,我有一个主cpp文件,其他所有文件都被排除在构建之外,并且我从主cpp文件中包含它们以创建一个翻译单元。这在VS 2013中完美运行,但是我在2015中遇到了问题,任何未包含在构建中的cpp文件都会显示其他cpp文件中定义的类型为红色错误。项目可以正常构建,我可以F12查看类型定义,但类型不会出现在智能感知中并显示为错误。
有人知道这是否是已知问题或者其他人是否可以复制它 - 还是它只是特定于我的设置?
例如,我有main.cpp。
struct Foo
{
    int Bar;
};

#include "Test.cpp"

int main()
{
    Foo x = Test();

    return 0;
}

还有Test.cpp,该文件在使用VS UI时被排除在构建之外。

Foo Test()
{
    Foo x;
    x.Bar = 2;
    return x;
}

代码可以编译通过,但智能提示无法显示Test.cpp中的Foo,并在Foo下方显示红色错误。


很抱歉我错过了分号和双引号。我在重新安装VS的过程中进行了提问。尽管这对我所问的问题没有任何影响。更新后的代码片段在Visual Studio 2013中运行良好,但在2015年版本中出现了所描述的问题。 - Terry
1个回答

3
我可以在Visual Studio 2015中重现你的问题。
从构建中排除文件并不能达到你所想要的效果。因为你实际上是在使用那些 .cpp 文件作为头文件,所以你需要告诉IntelliSense。
在这些文件的属性中,将“Excluded From Build”设置恢复为“继承自父级或项目默认值”,并将“Item Type”设置为“C/C++ header”(记得在顶部选择“All Configurations”和“All Platforms”)。
此时,波浪线仍然存在。保存并关闭解决方案,然后删除解决方案的.sdf文件(它将自动重新创建)。重新打开解决方案,享受没有波浪线的快乐。

太好了!那就是问题所在。我将类型更改为“不参与构建”,而不是C头文件,它的工作方式与2013年完全相同!感谢您的帮助。 - Terry
我有同样的问题,但是针对boost库中的scoped_ptr.hpp文件。我已经在“包含目录”中指定了boost目录,并且Intellisense在#include <boost/scoped_ptr.hpp>处没有显示任何错误,但是使用boost::scoped_ptr本身会伴随着Intellisense错误。有什么想法可以解决这个问题吗? - rents
如果我更改项目的某些属性,比如“项类型”,这个更改会存储在哪里?是在.vcxproj文件、.sln文件还是其他地方? - rents
我发现存储这些值的是 .vcxproj 和 .vcxproj.filters 文件。 - rents
@rents,抱歉我无法在我的端上复制这个问题。boost源文件通常不应该是你项目的一部分;你只需要将它们作为外部文件#include进来,所以它们不应该出现在.vcxproj内的列表中。根据我的经验,许多IntelliSense的问题都可以通过按照上述方法重新构建索引文件来解决。最近版本的格式已经发生了变化,扩展名为.VC.db。为了保险起见,我会清理解决方案的中间输出文件。 - bogdan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接