为什么以下代码没有编译,我该如何解决?我得到的错误是:
使用未声明的标识符'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是上述代码的可编辑在线版本。
答案 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