簡體   English   中英

課程相互依賴

[英]classes depend on each other

考慮這些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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM