Visual Studio .cpp 文件中的 2015 IntelliSense #included as headers

Visual Studio 2015 IntelliSense in .cpp files #included as headers

在我的项目中,我有一个主 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 下显示红色错误。

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

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

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

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