[英]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.