gpt4 book ai didi

C++ 仿函数和模板 : error: declaration of 'class List'

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:46:06 24 4
gpt4 key购买 nike

我在模板类中有一个嵌套模板,用于名为 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>'

我应该如何引用列表?为什么声明不正确?

编辑:

现在更改为:

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

关于C++ 仿函数和模板 : error: declaration of 'class List<T>' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17105066/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com