[英]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.