类取决于彼此(classes depend on each other)

2019-06-27 20:59发布

考虑这些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;

我知道我没有刻意去写构造函数和所有的,但你的想法。 任何人都知道的方式来纠正这种情况?

Answer 1:

有几种常见的技术来做到这一点。

首先,当你可以使用前置声明。 其次,如果循环依赖的一部分在一类依赖于函数,使该类从一个“接口”类,它提供的那些函数的声明继承。 最后,使用PIMPL(指针实施细则)。 而不是列出所有字段在类声明的,只包含一个指向实际的类数据。

例如,在foo.h

class foo_members;

class foo
{
    foo_members* opaque;
};

而在foo.cpp

#include "bar.h"
class foo_members{
    bar mybar;
};


Answer 2:

另一种方法是仅做一个声明所有的类头。

[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;
}


文章来源: classes depend on each other
标签: c++ oop class