我在一个名为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()的每个实现,此运算符的声明必须不同?
答案 0 :(得分:5)
不
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 {
...
}
你必须&#34;分开&#34;两个template<...>
(第一个用于类,第二个用于成员函数)。