C++函子和模板:错误:'class List<T>'声明

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

本文关键字:lt List gt 声明 class 错误 C++      更新时间:2023-10-16

我有一个嵌套的模板在一个模板类的方法称为List::find()。这个方法得到一个函子作为输入,它是:"Function condition"。

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()的每个实现,该操作符的声明必须是不同的?

Not

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<...>(第一个用于类,第二个用于成员函数)。