如何用C ++中的友元声明解决循环依赖?

时间:2015-05-29 17:15:50

标签: c++ friend circular-dependency

为什么以下代码没有编译,我该如何解决?我得到的错误是:

  

使用未声明的标识符'Foo'

尽管Foo在发生错误时明确声明并定义(在friend的{​​{1}}声明中)。

foo.h中

Bar

Foo.cpp中

#ifndef FOO_H
#define FOO_H

#include "bar.h" // needed for friend declaration in FooChild

class Foo {
public:
  void Func(const Bar&) const;
};

class FooChild : public Foo {
  friend void Bar::Func(FooChild*);
};

#endif

bar.h

#include "foo.h"

void Foo::Func(const Bar& B) const {
  // do stuff with B.X
}

Here是上述代码的可编辑在线版本。

1 个答案:

答案 0 :(得分:3)

FooChild放入自己的头文件中。

foo.h中:

#ifndef FOO_H
#define FOO_H

class Bar;

class Foo {
public:
  void Func(const Bar&) const;
};

#endif

foochild.h:

#ifndef FOOCHILD_H
#define FOOCHILD_H

#include "foo.h"
#include "bar.h"

class FooChild : public Foo {
  friend void Bar::Func(FooChild*);
};

#endif