C++函子和模板:错误:'class List<T>'声明
C++ functors and templates: error: declaration of 'class List<T>'
我有一个嵌套的模板在一个模板类的方法称为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<...>
(第一个用于类,第二个用于成员函数)。
相关文章:
- 使用std::multimap迭代器创建std::list
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 如何在 C 中正确使用 libiconv 使其不会报告"Arg list too long"?
- C++中带有List类的迭代器Segfault
- 使用"std::unordereded_map"映射到"std::list"对象
- 呼叫运营商<<临时
- GCC对可能有效的代码抛出init list生存期警告
- 使用std::list创建循环链表
- 如何防止clang格式在流运算符调用之间添加换行符<<
- 重载Singly Linked List中的赋值运算符
- <<操作员在下面的行中工作
- '[](std::list& list)<int>{return std::move(list)}(list)' 是否保证将 'list' 留空?
- 如果 KEY 是 std::list 或 std::vector 而不是值,那么 std::map 的默认行为是什么?
- 为什么这个 std::queue/指向结构的指针列表直到 List.Size() == 0 才释放内存?
- "std::list::splice(std::const_iterator pos, std::list&& other)"是否保证将"其他"留空?
- 从嵌套循环中的 std::list 中删除将返回访问冲突
- QStringList vs list<shared_ptr<QString>> 性能比较C++
- opencv 2.4.7在iOS错误背景_segm.hpp #include&lt; list&gt;未找到
- 在修改列表后,std :: list&lt; t&gt; :: end()的值是否会更改