0

我正在尝试实现一个简单的 std::find_if() 之类的函数来使用(我不允许在作业中使用它)。

这是我的实现:

template<class Iterator, class Function>
Iterator setFindIf(Iterator first, Iterator end, Function predicate) {
    for (Iterator iterator = first; iterator != end; ++iterator) {
        if (predicate(*iterator)) {
            return iterator;
        }
    }
    return end;
}

这是调用 setFindIf() 的行:

if (setFindIf(orders.begin(), orders.end(),
            orderCustomerHasOpenOrder(id, ordNum)) != orders.end()) {

这是错误:

undefined reference to `std::_Rb_tree_const_iterator<Order> setFindIf<std::_Rb_tree_const_iterator<Order>, orderCustomerHasOpenOrder>(std::_Rb_tree_const_iterator<Order>, std::_Rb_tree_const_iterator<Order>, orderCustomerHasOpenOrder)'

感谢帮助者。

4

1 回答 1

0

看起来您在标题中声明了模板:

template<class Iterator, class Function>
Iterator setFindIf(Iterator first, Iterator end, Function predicate);

然后将实现放在 .cpp 文件中,并从不同的 .cpp 文件中调用它。它不适用于模板。

迈克首先得到了他的回答,但他发表了评论,所以无论如何我都会发布这个。

于 2013-06-18T13:40:54.980 回答