簡體   English   中英

C ++仿函數和模板:錯誤:'class List <T>'的聲明

[英]C++ functors and templates: error: declaration of 'class List<T>'

我在一個名為List :: find()的方法的模板類中有一個嵌套模板。 這個方法得到一個函子作為輸入,它是:“函數條件”。

template<class T>
class List {
....
template<class Function>
Iterator find(Function condition) const;
....
};

template<class T, class Function>
typename List<T>::Iterator List<T>::find(Function condition) const {
   List<int>::Iterator it = this->begin();
   for (; it != this->end(); ++it) {
   if (condition(*it)) {
       break;
   }
   }
   return it;
}

錯誤是:

..\list.h:108:62: error: invalid use of incomplete type 'class List<T>'
..\list.h:16:7: error: declaration of 'class List<T>'

我該如何引用List? 為什么聲明不正確?

編輯:

現在改為:

template<class T>
template<class Function>

我收到這些錯誤:

..\list.h:111:30: error: no match for 'operator++' in '++it'
..\list.h:112:18: error: no match for 'operator*' in '*it'

引用此運算符聲明(其中之一):

template<class T>
typename List<T>::Iterator& List<T>::Iterator::operator++() {
    List<T>::ConstIterator::operator++();
    return *this;
}

為什么對於find()的每個實現,此運算符的聲明必須不同?

template<class T, class Function>
typename List<T>::Iterator List<T>::find(Function condition) const {
   ...
}

反而

template<class T>
template<class Function>
typename List<T>::Iterator List<T>::find(Function condition) const {
   ...
}

您必須“分離”兩個template<...> (第一個用於類,第二個用於成員函數)。

暫無
暫無

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

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