假设我有一个类foo,类bar的对象作为成员
class foo
{
bar m_bar;
};
Run Code Online (Sandbox Code Playgroud)
现在假设酒吧需要跟踪拥有它的foo
class bar
{
foo * m_pfoo;
}
Run Code Online (Sandbox Code Playgroud)
这两个类相互引用,没有前向声明,不会编译.因此,在foo声明之前添加此行可以解决该问题
class bar;
Run Code Online (Sandbox Code Playgroud)
现在,问题是 - 在编写头文件时,每个头都依赖于另一个:foo.h需要bar.h中的定义,反之亦然.处理这个问题的正确方法是什么?
Ree*_*sey 24
您需要将所有成员访问权限从标题中移出,并放入源文件中.
这样,您可以在标头中转发声明类,并在foo中定义它们:
// foo.h
class bar;
class foo {
bar * m_pbar;
}
// bar.h
class foo;
class bar {
foo * parent;
}
Run Code Online (Sandbox Code Playgroud)
这将允许您工作 - 您只是不能将需要成员信息的定义放入标题 - 将其移动到.cpp文件..cpp文件可以包含foo.h和bar.h:
// Foo.cpp
#include "foo.h"
#Include "bar.h"
void foo::some_method() {
this->m_pbar->do_something(); // Legal, now, since both headers have been included
}
Run Code Online (Sandbox Code Playgroud)