簡體   English   中英

C ++錯誤:“沒有匹配的函數來調用[class] :: [function]”

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

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