C++ 简单循环引用和前向声明问题

C++ Simple circular reference and forward declaration issue

我收到这个错误:

error C3646: 'bar': unknown override specifier

在 Visual Studio 2015 年尝试编译这个非常简单的 C++ 代码时:

main.cpp:

#include "Foo.h"

int main ()
{
    return 0;
}

Foo.h:

#pragma once

#include "Bar.h"

class Foo
{
public:
    Foo();

    Bar bar;
};

Bar.h:

#pragma once

#include "Foo.h"

class Bar
{
public:
    Bar();
};

我知道这是一个循环引用,因为每个 .h 都包含另一个,解决方案应该使用 前向声明,但它们似乎不起作用,有人可以吗解释为什么?我在这里发现了类似的问题,而且解决方案总是一样的,我想我遗漏了一些东西:)

循环引用完全是您自己造成的,您可以通过从 Bar.h 中删除 #include "Foo.h" 来安全地删除它:

#pragma once

//#include "Foo.h"  <---- not necessary, Bar does not depend on Foo

class Bar
{
public:
    Bar();
};

您不需要在 Foo.h 中对 Bar 进行前向声明。更一般的情况是,如果 FooBar 相互依赖,则需要前向声明。