簡體   English   中英

沒有匹配的 function 調用 CLASS:CLASSCPP(C++)

[英]no matching function for call to CLASS:CLASSCPP(C++)

錯誤:說明資源路徑位置類型與 function 不匹配,無法調用“Saat::Saat()”Ucus.cpp /project9/src 第 4 行 C/C++ 問題

這是我的 class 叫 Saat

#ifndef SAAT_H_
#define SAAT_H_
#include <string>

class Saat {
public:
    Saat(int, int);
    std::string to_string() const;
private:
    int saat, dakika;
};

#endif /* SAAT_H_ */

#include "Saat.h"

Saat::Saat(int s, int d){
    saat = s;
    dakika = d;
}
std::string Saat::to_string() const{
    return std::to_string(saat) + ":" + std::to_string(dakika);
}

這是我的 class 叫 Ucus

#ifndef UCUS_H_
#define UCUS_H_
#include <string>
#include "Saat.h"

class Ucus {
public:
    Ucus(std::string, std::string, std::string, Saat);
    static int get_ucus_sayisi();
    std::string to_string();
private:
    std::string cikisSehir;
    std::string varisSehir;
    std::string ucusNo;
    Saat kalkis_saati;
    static int ucus_sayisi;
};

#endif /* UCUS_H_ */

#include "Ucus.h"

/*ERROR IS HERE */Ucus::Ucus(std::string cs, std::string vs, std::string un, Saat s) { 
    cikisSehir = cs;
    varisSehir = vs;
    ucusNo = un;
    kalkis_saati = s;


}
int Ucus::get_ucus_sayisi(){
    return ucus_sayisi;

}
std::string Ucus::to_string(){
    return cikisSehir + varisSehir + ucusNo + kalkis_saati.to_string();
}

我正在觀看有關課程的視頻,我想在 Ucus class 中使用我的 Saat class。我在視頻中做同樣的事情,但它給了我這個錯誤:***( 描述資源路徑位置類型不匹配 function 用於調用 ' Saat::Saat()' Ucus.cpp /project9/src 第 4 行 C/C++ 問題)


沒有什么不同,但對我不起作用。

在 class 中,成員是在進入構造函數體之前創建的。 您的代碼試圖默認構造一個 Saat,然后通過賦值在主體中覆蓋它。

因為您的 Saat class 沒有默認構造函數,所以您的代碼無法編譯。 為什么你的 class 沒有默認構造函數? 如果您不提供任何構造函數,編譯器可以為您生成一個,但是一旦您編寫了一個,默認構造函數將不再提供,無需請求。 但如果這個編譯你會稍微差一點。 很高興發現錯誤而不是默默地忍受它。

這樣做的正確方法是不要默認構造您的 object,而是在構造函數成員初始化列表中復制構造它和其他成員:

Ucus::Ucus(std::string cs, std::string vs, std::string un, Saat s)
  cikisSehir{cs},
  varisSehir{vs},
  ucusNo{un},
  kalkis_saati{s},
{ 
}

它也更有效率。 沒有理由創建一個 object,然后通過賦值覆蓋它。 最好通過副本直接創建它,這一個自動生成的構造函數(除非你有一個不可復制的成員,但在你的情況下你沒有。)

當然,您真的應該考慮將字符串作為std::string const &傳遞,以避免不必要的復制。

暫無
暫無

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

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