2017-02-28 87 views
3

我想弄清楚如何正確使用多個文件。我在頭文件中創建了一個類。然後一個包含該頭文件並使用Stage :: Stage(){}實現所有內容的cpp文件。我還創建了一個名爲Display的類,它沒有默認構造函數,但需要2個整數參數。我取得了Stage類的函數:C++將對象傳遞給函數,其構造函數被稱爲

Stage::Stage (Display &display_){ 
    display = display_; 
} 

但它會導致錯誤 哪個是真實的,不存在「的呼籲‘顯示::顯示()’不匹配函數」,但它不應該需要存在。我不想在這裏創建一個新的Display對象,我試圖將現有的對象傳遞給Stage對象。 (我正在使用Dev C++)

+2

'display = display_;'意味着調用'display'的賦值操作符。你沒有說'display'是什麼,但可能它是'Stage'的成員變量,它必須已經由此構建 –

回答

3

構造函數的構造函數在執行構造函數的主體之前必須默認初始化display。在執行類的構造函數的主體之前,必須構造所有類成員。沒有例外。因此,顯示的代碼嘗試在使用賦值運算符之前默認構造display

由於Display沒有默認構造函數,因此失敗,因此您的編譯器抱怨沒有構造函數的構造函數。

在這種情況下,你必須明確地構建display在構造函數初始化部分:

Stage::Stage (Display &display_) : display{display_} 
{ 
} 

,或者預先C++ 11:

Stage::Stage (Display &display_) : display(display_) 
{ 
} 

這明確地構建display成員權從一開始,可能會使用它的複製構造函數。