簡體   English   中英

沒有匹配的函數來調用…類模板錯誤

[英]no matching function for call to… error with template class

我必須做一個通用的雙鏈表,並且我在vc ++ 2010中做到了,並且一切正常,但是我必須用gcc進行編譯,但是無法編譯。 當我調用以迭代器作為參數的方法時,出現此錯誤:

no matching function for call to 'DLList<int>::Erase(DLList<int>::iterator, DLList<int>::iterator)'| 
[...]note: candidates are: void DLList<T>::Erase(DLList<T>::iterator&, DLList<T>::iterator&) [with T = int]|

DLList位於.h文件中,並且每個方法都內聯定義。 迭代器類也位於DLList類中。

template<typename T>
class DLList{
[...]
public: 
[...]
    void Erase(iterator &_first, iterator &_last){...}
    iterator first(){...}
    iterator last(){...}
[...]
    class iterator{...}
[...]
};

以及導致錯誤的代碼:

iList.Erase(iList.first(), iList.last());

(iList:DLList <int> iList)

我該如何解決?

void Erase(iterator const &_first, iterator const &_last){...}

這允許傳遞從first()last()返回的臨時迭代器。 您無法獲得對臨時變量的非常量引用。

另外,您可以使用此函數簽名並處理迭代器副本(例如,如果需要在Erase進行修改):

void Erase(iterator _first, iterator _last){...}

問題是非常量引用不能綁定到臨時目錄。 first()last()是臨時的,並且它們不能由Erase簽名中的引用綁定。

暫無
暫無

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

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