.cpp 文件中的 Visual Studio 2015 IntelliSense #included 作为标头

Posted

技术标签:

【中文标题】.cpp 文件中的 Visual Studio 2015 IntelliSense #included 作为标头【英文标题】:Visual Studio 2015 IntelliSense in .cpp files #included as headers 【发布时间】:2015-08-09 19:49:09 【问题描述】:

在我的项目中,我有一个主 cpp 文件,并且任何其他文件都从构建中排除,我将它们从主 cpp 文件中包含以创建一个翻译单元。这在 VS 2013 中完美运行,但是我在 2015 年遇到问题,其中未包含在构建显示类型中的任何 cpp 文件在其他 cpp 文件中定义的类型显示为红色错误。项目构建良好,我可以 F12 到类型定义,但类型不会出现在智能感知中并显示为错误。

有谁知道这是否是一个已知问题,或者其他任何人都可以复制它 - 还是我的设置特有的问题?

例如我有 main.cpp

struct Foo

    int Bar;
;

#include "Test.cpp"

int main()

    Foo x = Test();

    return 0;

以及使用 VS UI 从构建中排除的 Test.cpp。

Foo Test()

    Foo x;
    x.Bar = 2;
    return x;

这会构建,但智能感知不会显示来自 Test.cpp 的 Foo,并且会在 Foo 下显示红色错误。

【问题讨论】:

很抱歉我错过了分号和双引号。当我问这个问题时,我正在重新安装 VS。尽管这与我的要求没有什么不同。更新后的代码 sn-p 在 Visual Studio 2013 中运行良好,但我在 2015 年遇到了所描述的问题。 【参考方案1】:

我可以在 Visual Studio 2015 中复制您的问题。

从构建中排除文件不会做你想要的。由于您有效地将这些 .cpp 文件用作头文件,因此您需要向 IntelliSense 指出这一点。

在这些文件的属性中,将Excluded From Build 设置恢复为<inherit from parent or project defaults> 并将Item Type 设置为C/C++ header(记得在顶部选择All ConfigurationsAll Platforms)。

此时,曲线仍然存在。保存并关闭解决方案,然后删除解决方案的.sdf 文件(它将自动重新创建)。重新打开解决方案,享受没有曲线的乐趣。

【讨论】:

太棒了!这就是问题所在。我将类型更改为“不参与构建”而不是 c 标头,它的工作方式与 2013 年完全相同!感谢您的帮助。 我也有同样的问题,但是对于 boost 库来说,scoped_ptr.hpp。我已经在“包含目录”中指定了 boost 目录,并且 Intellisense 在 #include 中没有显示任何错误,但是任何使用 boost::scoped_ptr 本身都会伴随着 intellisense 错误。知道如何解决吗? 另外,如果我更改项目的某些属性,比如“项目类型”,那么这个更改究竟存储在哪里?在 .vcxproj 文件或 .sln 文件或其他地方? 我确实发现存储这些值的是 .vcxproj 和 .vcxproj.filters 文件。 @rents 我无法复制它,抱歉。 boost 源文件通常不应该是您项目的一部分;您只需将#include 它们作为外部文件,因此它们不应出现在.vcxproj 内的列表中。根据我的经验,IntelliSense 的许多问题都可以通过如上所述重建索引文件来解决。格式在最近的版本中发生了变化,扩展名为.VC.db。我也会清理解决方案的中间输出文件,以便更好地衡量。

以上是关于.cpp 文件中的 Visual Studio 2015 IntelliSense #included 作为标头的主要内容,如果未能解决你的问题,请参考以下文章

怎样在Visual Studio 中单独运行一个cpp

什么是在 Visual Studio 2012 的新 C++ 项目中自动创建的 stdafx.cpp 文件

Visual Studio 2019 未运行其他 .cpp 文件

microsoft visual studio创建button背景颜色代码

如何在 Visual Studio 2010 Express 中将 cpp 编译为 dll

在 Visual Studio (2015) 中编译更改的 cpp 文件