2014-05-16 35 views
-4

我不能頂端類下定義從其他類對象 示例:如果我從其他類定義對象

class B; 
class a 
{ 
public:  
    a(){ cout << "a\n"; } 
    ~a(){ cout << "~a\n"; } 
private: 
B ob; 
}; 

class B 
{ 
public: 
    B(){ cout << "B\n"; } 
    ~B(){ cout << "~B\n"; } 
    a ob; 
}; 

int main() 
{ 
    B r; 

    system("pause"); 

} 

問題我不能在類的對象的 甚至寫上面(B類;)

回答

1

您的問題可以通過將B對象指針傳遞給a構造函數來解決。如果將B類更改爲包含指針a,則可以解決遞歸問題。實際上,通過創建一個包含對象a的對象B創建一個無限循環,其中包含對象B等等。

class B 
{ 
public: 
    B(a* _ob) : ob(_ob) { cout << "B\n"; } 
    ~B(){ cout << "~B\n"; } 
    a* ob; 
}; 

int main() 
{ 
    a _a; 
    B r(_a); 

    system("pause"); 

} 
0

你的類是遞歸定義的。

您的op成員不是參考,而是真實的物體。因此,每個a包含包含包含包含BaB ...

這個循環永遠不會結束,因此在創建一個B對象沒有辦法。