我讀了關於C++中的結構,它不能包含它自己的實例。 任何人都可以幫助我理解它爲什麼不能包含它自己的實例嗎?爲什麼結構不能包含它自己的實例?
回答
因爲要創建它的實例,您需要創建變量,它本身就是它的一個實例 - 它將調用構造函數。
這將導致對構造函數的無限遞歸調用。
假設class A
有一個名爲a
的實例變量:
調用的A
構造會造成a
初始化,它本身就是一個A
。要做到這一點 - A
的構造函數將被再次調用。
請注意,它甚至不會編譯,因爲編譯器無法爲它分配內存,它不知道爲每個對象分配多少空間。需要多少空間才能存儲實例變量a
? [任何有限的空間將是不夠的,因爲總會有一個額外的變量,也需要分配]
因爲那麼它會佔用「無限」的存儲,因爲它初始化時遞歸地初始化自己。但是,您可以將指針存儲到相同的結構中。
例如這是無效的:
struct a
{
int someVar;
a bad;
};
這是有效的(比方說,如果你想要這個結構的鏈接列表):
struct a
{
int someVar;
a* good;
};
因爲那將導致inifite遞歸。例如
struct foo
{
int boo;
foo f;
};
foo f;
foo
將包含foo
含有foo
等等
要解決它,你應該使用指針:
struct foo
{
int boo;
foo* f;
};
不只是結構的任何不完整的數據類型不能爲與它一起使用。 可以說你有一個結構體A,並且你已經包含了與成員體相同的結構體,現在當編譯器試圖向它分配內存時,它如何知道要分配多少內存,因爲你已經聲明瞭結構體A,它尚未完全定義它會拋出錯誤不完整的數據類型不允許。
正如其他答案指出的那樣,該結構不能包含自身的實例,因爲這會在創建結構時導致無限遞歸。然而一個結構可以包含一個指針本身:
struct foo
{
int boo;
foo *f;
};
foo f;
f.f = &f;
因爲不可能創造這樣的結構存儲器佈局。如果struct foo
包含int
和foo
,那麼如何將sizeof(int)+sizeof(foo)
字節合併到sizeof(foo)
字節中?等式A+B=A
對於A,B > 0
沒有任何解決方案。
struct bedroom
{
bed b;
table t;
bedroom r;
};
您現在看到問題了嗎?一間臥室需要存放無數張牀和桌子。
但它一直都是龜! – StackedCrooked 2012-02-20 13:06:30
你在臥室裏的桌子上做什麼? – sbi 2012-02-20 13:06:59
@sbi:把我的C++書放在上面? – fredoverflow 2012-02-20 13:15:30
- 1. 結構定義包含一個自己的靜態實例?
- 2. 爲什麼一個結構不能成爲自己的成員?
- 3. 爲什麼我不能將DynamicMethod綁定到結構實例?
- 4. 爲什麼我的結構變量不包含此成員?
- 5. 爲什麼結構類型被定義爲自己的名字?
- 6. 爲什麼Mako不能找到包含它的模板?
- 7. 爲什麼我的JQuery插件沒有得到它自己的實例?
- 8. 爲什麼我的Google App Engine實例ID不能包含單詞「admin」?
- 9. 不能使用結構從自己的包
- 10. 包含它們自己的Python類?
- 11. 模板類包含一個對它自己的實例的引用stdvector
- 12. 爲什麼Ruby File類不包含大小實例方法
- 13. 爲什麼我不能包含博客?
- 14. API體系結構 - 包含什麼
- 15. 爲什麼打字稿有它自己的包管理器?
- 16. 爲什麼許多nHibernate示例代碼實例包含Castle dll?
- 17. 爲什麼一個類返回自己的一個實例?
- 18. 它自己的實例的Python調用構造函數
- 19. 爲什麼結構可以存儲自己的大小?
- 20. 爲什麼Direct3D沒有自己的頂點結構?
- 21. 爲什麼整個包結構需要包含在Class.forName()中?
- 22. 包含結構的結構與包含指針的結構
- 23. 什麼是nameser_compat.h,爲什麼不包含它?
- 24. 爲什麼我不能在Perl中實例化POSIX包?
- 25. 爲什麼它的0.0 ELB實例?
- 26. 爲什麼我不能爲D中的結構實現默認構造函數?
- 27. 它爲什麼包含「使用哪裏」?
- 28. 爲什麼包含模板需要自己的<cfoutput>包裝?
- 29. 什麼是Ruby中的方法類對象?它有什麼作用 ?爲什麼它不能被實例化?
- 30. 什麼是自包含功能?
閱讀:http://stackoverflow.com/questions/588623/self-referential-struct-definition – YXD 2012-02-20 11:41:51
結構有多大? – 2012-02-20 11:41:52