[英]C++ Error: 'no matching function for call to [class]::[function]'
我有一個帶有方法的模板類template <typename T> class MyClass
:
void add (T& item) {
data[indexToInsert++] = &item; // data is an array of T*
}
在主要方面:
MyClass<int> thing;
thing.add(10);
在第二行,我收到此錯誤:
no matching function for call to MyClass::add(int)
為什么會這樣呢?
您的成員函數期望引用T
,即int&
。 要傳遞的純int
,而不是類型的變量int
,其中C ++可能需要參考。 這是不允許的:您可以將int
代替常量引用,但不能代替非常量引用。
這樣做的原因是,當您傳遞一個值代替常量引用時,C ++可以創建一個臨時對象,將值復制到其中,然后將對該臨時對象的引用傳遞給函數。 對非恆定引用執行相同操作將是不正確的,因為您的代碼無法訪問可能被修改的臨時對象。
您的代碼說明了這種情況不正確的原因:您將10
傳遞給了函數,但是函數采用了item
的地址。 10
的地址是什么? C ++不知道,因為整數立即數10
沒有地址。
您可以通過提供int
類型的變量,將其設置為10
並調用add
來修復該調用:
MyClass<int> thing;
int ten = 10;
thing.add(ten);
但是,你需要確保thing
不會有更廣泛的范圍比ten
,因為否則你將與內部的“懸擺指針”最終data
的數組thing
對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.