【轉】 C++中兩個類相互包含引用問題

來源:互聯網
上載者:User

標籤:存在   sdn   bsp   錯誤提示   使用   包含   標頭檔   cpp   內容   

原文:http://blog.csdn.net/leo115/article/details/7395077

 

在構造自己的類時,有可能會碰到兩個類之間的相互引用問題,例如:定義了類A類B,A中使用了B定義的類型,B中也使用了A定義的類型

class A

{

int i;

B b;

}

class B

{

int i;

A* a;

}

請注意上面的定義內容,一般情況下是不能出現類A,類B相互引用都定義對象,即如下的樣子:

class A

{

int i;

B b;

}

class B

{

int i;

A a;

}

在這種情況下,想想可以有a.b.a.b.a.b.a.b.a.b…………,很有點子子孫孫無窮盡之狀,那麼我的機器也無法承受。最主要的還是這種關係很難存在,也很難管理。這種定義方式類同程式中的死迴圈。所以,一般來說,兩者的定義,至少有一方是使用指標,或者兩者都使用指標,但是決不能兩者都定義實體物件。

言歸正傳,那麼,在定義時因為相互引用肯定會需要相互包含標頭檔,如果僅僅只是在各自的標頭檔中包含對方的標頭檔,是通不過編譯的,如下:

//class A.h

#include "B.h"

class A

{

int i;

B b;

}

//class B.h

#include "A.h"

class B

{

int i;

A *a;

}

如上的包含方式可能會造成編譯器有錯誤提示:A.h檔案中使用了示知類型B。

怎麼辦?

一般的做法是:兩個類的標頭檔之中,選一個包含另一個類的標頭檔,但另一個標頭檔中只能採用class *;的申明形式,而在實現檔案中(*.cpp)中包含標頭檔,如下:

//class A.h

#include "B.h"

class A

{

int i;

B b;

}

//class B.h

class A;

class B

{

int i;

A *a;

}

//B.cpp

//在B.cpp中的檔案包含處要有下面語句,否則不能調用成員a的任何內容

#include "A.h"

B::B()

{

……

}

【轉】 C++中兩個類相互包含引用問題

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.