1. 程式人生 > >c++ 兩個類互相引用的問題

c++ 兩個類互相引用的問題

現在有兩個類要相互應用時,會出現各種各樣的問題,首先看第一個例子:

#ifndef AH
#define AH
class B;
class A {
    B *memb;
    A() {
         
    }
    ~A() {
        delete memb;
    }
};
#endif
標頭檔案A.h包含class A如上:
#ifndef BH
#define BH
class B {
     
};
#endif
標頭檔案B.h包含classB

此時編譯就會產生類似上面的警告資訊:warning C4150: 刪除指向不完整“B”型別的指標;沒有呼叫解構函式


此時因為在class A 中的B 的宣告是依賴B的前置宣告,而不是#include"b.h"所以,B對A來說是不可見的,因此無法呼叫解構函式。

如果這時class A 和class B相互應用物件:如下程式碼:

A.h

#ifndef AH
#define AH
class B;
class A {
    B b;
};
#endif


B.h
#ifndef BH
#define BH
#include "A.h"
class B {
    A a;
};
#endif
B 對於A來說還是不可見的,所以定義會報錯;即使在A.h中包含#include"b.h"這時會出現相互包含的問題,相互的定義都無效。

此種狀況的解決利用前置宣告定義的那個類中的保持另外一個類的引用定義為指標,定義指標時不需要對那個類的定義可見





相關推薦

C++互相引用

A.h #include "A.h" #include "B.h" class A {  ...     B b; }   B.h class A; class B {   ...  

c++ 互相引用的問題

現在有兩個類要相互應用時,會出現各種各樣的問題,首先看第一個例子: #ifndef AH #define AH class B; class A { B *memb; A() { } ~A() { dele

c++中互相引用的問題

pro 如何 ++ code 泛型 cin padding 直接 fine 原文鏈接http://www.cnblogs.com/weixliu/p/3957227.html   最近在改一個C++程序的時候碰到一條警告信息,警告信息為:“

C++中互相引用的解決方法

轉載自  ---》 https://blog.csdn.net/xiqingnian/article/details/41214539一、問題描述現在有兩個類A和B需要定義,定義A的時候需要用到B,定義B的時候需要用到A。二、分析A和B的定義和呼叫都放在一個檔案中肯定是不可以

C++設計技巧(一)之互相擁有對方的物件指標

1、在實際的運用中我們也會用到如下的類關係: class B; class A { int i; B *lpb; } class B { int i; A* lpa; } 注意:一般來說,兩者的定義,至少有一方是使用指標,或兩者都使用指標,但是決不能兩者都定義實體物件。 這樣的實

待補遺(6)[C++]如何通過友元宣告互相訪問對方的非公有成員

1.設有類A,和類B兩個類,假定類A的宣告在類B之前(類的宣告總會有先後之分) 2.類A與類B,各自具有一個private許可權的func函式。 一、類A,類B的宣告如下(定義在在同一個原始檔中): #include <iostream> class A{

C++標頭檔案互相包含

在構造自己的類時,有可能會碰到兩個類之間的相互引用問題,例如:定義了類A類B,A中使用了B定義的型別,B中也使用了A定義的型別class A{    int i;    B b;}class B{    int i;    A* a;}請注意上面的定義內容,一般情況下是不能出

C++中互相包含

今天突然想起一個C++的問題,如果一個類A包含類B的例項,而例項B也包含另一個類A,這種方式的程式碼應該怎麼寫,按照一般的開發者的想法的程式碼如下: 檔案A.h #include "B.h" #include <iostream> usin

相互引用的解決方法

1 問題提出 最近在編寫“鬥地主”遊戲,在程式中有一個“CDealer”類用來實現發牌等等功能,還有一個“CPoker”類,用來表示撲克牌。在CDealer類中包含了一個CPoker類指標的成員變數,而在CPoker類中也包含了一個CDealer類指標的成員變數,如下所示:

c++相互調用

splay ostream () inf 文件 結果 頭文件 般的 gin 有可能會碰到兩個類之間的相互調用的問題,例如:定義了類A和類B,A中使用了B定義的類型,B中也使用了A定義的類型 class A { B b; }; class B {

C++ 包含互相呼叫彼此的成員變數和方法

      在編寫C++程式時,有時候我們想在一個類中呼叫另一個類中的成員變數或方法,比如:兩個類 A和B ,A包含B,一般A中呼叫B中的方法比較簡單,重點是子類B如何呼叫父類A中的成員變數或方法呢?

C++中相互包含引用問題

在構造自己的類時,有可能會碰到兩個類之間的相互引用問題,例如:定義了類A類B,A中使用了B定義的型別,B中也使用了A定義的型別 class A { int i; B b; } class B { int i; A* a; } 請注意上面的定義內容,一般情況下是不能出現類A,

c++中的標頭檔案互相包含編譯出錯的解決辦法

首先我們需要問一個問題是:為什麼兩個類不能互相包含標頭檔案? 所謂互相包含標頭檔案,我舉一個例子:我實現了兩個類:圖層類CLayer和符號類CSymbol,它們的大致關係是圖層裡包含有符號,符號裡定義一個相關圖層指標,具體請參考如下程式碼(注:以下程式碼僅供說明問題,不作為

C#.NET常見問題(FAQ)-如何判斷是否相同類型

cnblogs 空間 ont -s 交流 在線 下載 c# 教學視頻 可以用is方法判斷是否是一個類 ?更多教學視頻和資料下載,歡迎關註以下信息: 我的優酷空間: http://i.youku.com/acetaohai123 ?我的在線

如果希望互相呼叫成員變數或成員函式

如果希望在類A中使用類B的成員變數或成員函式。那麼有兩種方法: 1.類A和類B相互引用 典型例子是MVP,在View中建立Presenter,建立時View將自己傳入 class Activity{ Presenter mPresenter; public Activ

C#基礎 Type IsSubclassOf 是否為繼承的關係

慈心積善融學習,技術願為有情學。善心速造多好事,前人栽樹後乘涼。我今於此寫經驗,願見文者得啟發。 code using System; namespace ConsoleApp { p

C#用反射實現的物件之間相同屬性的值的複製

在進行實體轉換操作的時候如果需要在對兩個實體之間兩個屬性欄位差不多相同的類要進行一個互相的轉換,我們要把a物件的所有欄位的值都複製給b物件,我們只能用b.屬性=a.屬性來寫,如果屬性欄位太多的話,就要寫很多行復制語句,麻煩還容易漏掉一些,這個時候可以利用c#的反射來實現複製。我們可以寫這樣一個利用泛

如何通過值而不是引用交換物件?

如何通過值而不是引用交換兩個類物件? StackOverFlow 使用語言:VB.NET 原網頁: 問題描述 我想交換List中有兩個引用型別物件的值,而不是引用。比如,List1(1)在交換前後引用了一個

關於C#中的StreamReader與FileStream這

成員函式1. Peek() Returns the next available character but does not consume it. 2. Read() Reads the next character from the input stream and advances the chara

關於相互包含引用的思考

今天遇到一個問題,編譯時遇到了如下錯誤: 錯誤1 error C2146: 語法錯誤: 缺少“;”(在識別符號“move”的前面) 錯誤2 error C4430: 缺少型別說明符 - 假定為 int。注意:  C++ 不支援預設 int 寫個最簡單的例子: #ifnd