我將從我的問題開始: 我的問題是當我嘗試訪問類中某個實例的public
函數時出現分段錯誤。有關C++中的類和類實例的常見問題
假設我有一個類A
有一堆類實例的它像這樣:
class A {
...
public:
class B *B;
class C *C;
};
讓我們考慮類A
是我們的「全局」類;也就是說,類A
被髮送給我初始化和擁有的每個類。因此,每個類功能都可以調用A
到A->function()
的功能。此外,假設其他實例已經初始化,每個類可以調用屬於A
的實例的函數,如下所示:A->B->function()
。到目前爲止,一切都很好。我的問題是,當我嘗試訪問屬於A
的其中一個實例的函數時,突然發生段錯誤。我認爲原因是(爲什麼我問這個問題,因爲我不確定),是在實例B
已經初始化之前,類實例A
被髮送到類C
。然後在類C
中,我簡單地創建一個指針副本(意思是我的類C
有一個名爲class A *A
的私有實例A
)。因此,當我第一次創建類C
的實例時,我將它發送給類A
及其所有公共成員,然後C
的構造函數將A
作爲本地副本。
Phew。沒有提交代碼很難做到這一點。所以這是一個問題。說的我班A
功能之一包括:
C *c = new C(this);
和C
構造具有這樣的:
C(A *a_val) { a = a_val; }
,同時也包含了一個私有實例指針class A *a;
然後在A
實例化另一個函數B
類。我的C
班級能夠使用B
班嗎?如果沒有(這就是爲什麼我認爲我是違約的),我怎麼可能解決這個問題?
謝謝!
對不起,我無法提供實際的代碼。這只是非常漫長,我不認爲在這裏粘貼數百行是必要的。 – Amit
A,B和C之間是否有這種相互依存關係?我懷疑你的問題會隨着一些想法和重構而消失。而且,沒有代碼就很難設想你的問題。如何編寫一個小測試程序在這裏發佈? – MatthewD
您可能對成員正在初始化的順序有問題,但沒有更詳細的示例就不清楚。 –