考虑这些C ++片段:
foo.h中:
class foo
{
bar myobj;
};
bar.h:
class bar
{
foo *yourobj;
};
其他的文件:
#include "foo.h" //because foo.h is included first bar will not be defined in foo.h
#include "bar.h"
foo container;
bar blah;
我知道我没有刻意去写构造函数和所有的,但你的想法。 任何人都知道的方式来纠正这种情况?
有几种常见的技术来做到这一点。
首先,当你可以使用前置声明。 其次,如果循环依赖的一部分在一类依赖于函数,使该类从一个“接口”类,它提供的那些函数的声明继承。 最后,使用PIMPL(指针实施细则)。 而不是列出所有字段在类声明的,只包含一个指向实际的类数据。
例如,在foo.h
class foo_members;
class foo
{
foo_members* opaque;
};
而在foo.cpp
#include "bar.h"
class foo_members{
bar mybar;
};
另一种方法是仅做一个声明所有的类头。
[classes.h]
class foo;
class bar;
class foo
{
bar *FoosBar;
int FooFunc(void);
};
class bar
{
foo *BarsFoo;
bool BarFunc(void);
}
[Foo.cpp中]
#include "classes.h"
int foo::FooFunc(void)
{
// Reference FoosBar somewhere here or something maybe
return 7;
}
[Bar.cpp]
#include "classes.h"
bool bar::BarFunc(void)
{
// Reference BarsFoo somewhere here or something maybe
return true;
}