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

时间:2017-02-08 11:31:14

标签: c++ class visual-studio-2015 include forward-declaration

我收到此错误:

  

错误C3646:' bar':未知覆盖说明符

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

的main.cpp

def account_manager_for_user
 self.account_manager
end

foo.h中

#include "Foo.h"

int main ()
{
    return 0;
}

Bar.h

#pragma once

#include "Bar.h"

class Foo
{
public:
    Foo();

    Bar bar;
};

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

1 个答案:

答案 0 :(得分:2)

循环引用完全由您自己制作,您可以通过从Bar.h中删除#include "Foo.h"来安全删除它:

#pragma once

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

class Bar
{
public:
    Bar();
};

您不需要BarFoo.h的前瞻声明。更一般的情况是,FooBar相互依赖,这需要前瞻声明。