簡體   English   中英

C ++通過引用將對象傳遞給函數,其構造函數被調用

[英]C++ passing object to function by refrence, its constructor get called

我正在試圖弄清楚如何正確使用多個文件。 我在頭文件中創建了一個類。 然后是一個包含該頭文件並使用Stage :: Stage(){}等實現所有內容的cpp文件。我還創建了一個名為Display的類,它沒有默認構造函數,但需要2個整數參數。 我在Stage類中創建了一個函數:

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

但它會導致錯誤“沒有匹配函數來調用'Display :: Display()'”這是真的,它不存在,但它不應該存在。 我不是想在這里創建一個新的Display對象,我正在嘗試將現有的對象傳遞給Stage對象。 (我正在使用Dev C ++)

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

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

在這種情況下,您必須在構造函數的初始化部分中顯式構造display

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

或者,預C ++ 11:

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

這顯然是從一開始就構造display成員,大概是使用它的copy-constructor。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM