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