c 中在類中定義另只有帶引數建構函式的類的物件,編譯通不過

時間 2021-05-14 09:58:43

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 在函式中可以定義類,但是意義不大,因為在函式中定義類,你只能在這個函式中使用這個類,其他的函式是沒法用的,所以一般不會把類的定義放在函式中,但是這並沒有錯,能編譯過,也就是說作用域只在函式。 周德群 不行,在函式中不能定義類,類可以包含函式,但是函式不可能包含類,...