1樓:
在b中定義 a a; 是可以通過的,但在其他地方(比如函式中)這樣是不對的。
在b中定義 a a; 只是告訴編譯器:「b有一個a類的物件」,並不在定義的時候建立a這個物件成員,也就不考慮它的建構函式。a這個物件成員的建立是在執行b的建構函式時進行的,b的建構函式後面必須以初始化表的形式為a物件成員提供引數,比如
b( ) : a( 1 )
如果在建構函式中不為a提供引數,會發生錯誤。
在其他地方(比如函式中)定義a的物件時,必須定義成 a a(引數);的形式。因為定義時就要建立a的物件,所以要考慮它的建構函式。
你的程式出現錯誤不是因為在b中定義 a a;引起的。是因為:
1、你定義了a a(5)。
這是不行的,因為此時並不建立a物件,不能為其提供引數。你說「編譯器把此語句當成一個定義一個函式a a()」也是不對的。就是因為這時不能為a提供引數,一定要在b的建構函式中提供!
2、你的程式沒有為b提供一個「可以為a提供引數」的建構函式。
這樣你在主函式中定義b b的時候,就不能初始化它裡面的a。
所以,你的**應將這兩個錯誤改過來,即寫成如下:
class a
};class b
//或:b( int i ):a( i )。對a提供引數一定要按
//這種形式,在冒號後,不能在花括號裡面!
private:
a a;
};void main()
2樓:墮落de青蛙
a a(5); //但是這裡也編譯通不過,編譯器居然把此語句當成一個定義一個函式a a()了
這裡通不過很正常,有歧義的感覺:
1.定義一個a的物件,呼叫建構函式初始化,但初始化並不是放這裡,所以編譯器不會這樣解釋。
2.定義函式。
定義a的指標吧
3樓:匿名使用者
#include
using namespace std;
class a
};class b
private:
//a a; //這裡當然通不過,沒有可用的建構函式a a; //但是這裡也編譯通不過,編譯器居然把此語句當成一個定義一個函式a a()了,鬱悶!
};void main()
c++中以一個類b作為另一個類a的成員變數時的問題
4樓:匿名使用者
class b
;bai// class b只有一個帶引數du的構造zhi函dao數private:
int m_i;};
class a;
b m_b;};
5樓:匿名使用者
class b
; // class b只有一個帶引數的建構函式private:
int m_i;
};class a
;b m_b;};
6樓:匿名使用者
一個類不能作為另一類的成員,只能將一個類的物件作為另一個類的成員。只能先定義類b,然後再定義類a,類a中將類b的一個物件變數作為其成員。
c++中如果定義了帶引數的建構函式,那麼在定義物件時,必須初始化嗎?
7樓:匿名使用者
是這樣的。
你定義了建構函式,系統就不會用預設的建構函式了。
**中你定義了自己的帶參建構函式,所以系統的預設建構函式就在編譯時,不會生成了。
這個就需要自己定義了。
否則的話,date a;這樣使用的時候就會報錯。
8樓:兔子和小強
定義物件的時候它會呼叫相應的建構函式初始化自己。如果沒有引數就呼叫不帶引數的建構函式。
9樓:匿名使用者
如果一個類定義中沒有建構函式,那麼編譯器會自動給這個類新增一個空參的建構函式,函式體是什麼也不做。如果你給一個類實現了建構函式,它們編譯器就不再會這個類自動新增空參的建構函式了。這時候,如果你沒有提供空參構造,這意味著這個類將不允許空參構造。
這也就是你在編譯時遇到的現象。如果你希望使用空參構造和帶參構造兩種構造方式並存,你就需要分別實現兩個建構函式,或者實現一個帶預設引數的含參構造。
10樓:開心果
當你自己定義一個建構函式的時候,編譯器就不再生成預設建構函式了,除非你自己顯式的定義,所以你如果定義了有引數的建構函式,然後卻想無引數初始化,編譯器會報錯的
簡單來說,你要麼不寫建構函式,用成員函式賦值,要麼就把有引數無引數的建構函式都顯式的定義清楚,
11樓:
這個例子中有兩個建構函式,分別是含參和不含參的。那麼在定義物件的時候不初始化也不會報錯吧。
12樓:匿名使用者
你的問題解決了,不過大家的回答還是有點問題的,都說不定義建構函式,編譯器會自動生成一個無引數的建構函式,其實這個是不對的,只是在有些情況下才會生成。具體大家可以上網找找資料看下。http:
c中怎麼定義類,c 中怎麼定義一個類
using system public class desk 基類desk 設定desk的資訊 public void setinfo int len,int wid,int hei 列印desk的引數資訊 public void showinfo t width t height length,w...
C如何定義類型別的陣列,C 中如何定義類的陣列,以及給他們賦值?
student 學生物件的陣列 liststu new list 學生物件的集合 c 中自定義類陣列和結構陣列的使用 發現很多時候給定的陣列要實現某個邏輯或處理很是麻煩,一維陣列,二維陣列,等等需要經過n多轉換,還不如自己寫一個自定義陣列,既方便又節省時間,以下是類陣列,其實相當於定義了一個實體類一...
C 中類的定義可以巢狀嗎,c 中函式的定義和呼叫都可以巢狀嗎
芃芃 1 類的定義是可以巢狀的 2 在函式中可以定義類,但是意義不大,因為在函式中定義類,你只能在這個函式中使用這個類,其他的函式是沒法用的,所以一般不會把類的定義放在函式中,但是這並沒有錯,能編譯過,也就是說作用域只在函式。 周德群 不行,在函式中不能定義類,類可以包含函式,但是函式不可能包含類,...