C++中兩個類中互相包含對方對象的指標問題

來源:互聯網
上載者:User

  前幾天很不爽,因為C++中兩個類中互相包含對方對象的指標編譯時間提示某一個類未定義。。。所以我就想啊想,這樣也對,我的標頭檔都有#ifndef的,包含了一次就不能再包含了,以為就實現不了這樣的功能,於是就改了設計方案:

class A{public:    A(B* pB):m_pB(pB)    {    }private:    B* m_pB;};class B{public:    B() {}private:    int m_i;};

只在一個類中包含另一個類的指標(算是聚類吧,A不管理m_pB的死活),而在B需要A的屬性時通過傳遞參數進去。這樣有些麻煩,但是勉強達到了我的需求。

  今天,又遇到一個必須使用相互包含對象指標的問題,要不然通過參數傳來傳去麻煩的不得了。所以還是百度了下,結果終於找到了:(c++)兩個類相互包含引用的問題。裡面說的和我需要的差不多,解決方案是一樣的。

  文章裡面說的很清楚了,我也在這裡複述一遍吧,主要解決的就是檔案包含的問題:在A的標頭檔(A.h)中包含B的標頭檔(B.h),在A的源檔案(A.cpp)中包含(A.h),在B的標頭檔中使用A的聲明(class A;)而不是包含A的標頭檔,然後在B的源檔案(B.cpp)中包含A的標頭檔和B的標頭檔。代碼如下:

// A.h#include "B.h"class A{public:    A(B* pB):m_pB(pB) {}    void useB();private:    B* m_pB;};//A.cpp#include "A.h"void A::useB(){    //do something for m_pB}//B.hclass A;class B{public:    B(A* pA):m_pA(pA) {}    void useA();    private:    A* m_pA;};//B.h#include "A.h"#include "B.h"void B::useA(){    //do something for m_pA}

這樣的話B的標頭檔中不能有使用A的對象指標m_pA的代碼,否則會出現“使用了未定義的A”錯誤。

  最後,問題算是解決了,但是我現在還是有點不明白的,這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.