C++ &引用;对std的未定义引用::“u Rb_tree_const_iterator”;返回迭代器时

C++ &引用;对std的未定义引用::“u Rb_tree_const_iterator”;返回迭代器时,c++,templates,stl,iterator,set,C++,Templates,Stl,Iterator,Set,我正在尝试实现一个简单的std::find_if()类函数来使用(我的家庭作业中不允许使用它) 这是我的实现: template<class Iterator, class Function> Iterator setFindIf(Iterator first, Iterator end, Function predicate) { for (Iterator iterator = first; iterator != end; ++iterator) { i

我正在尝试实现一个简单的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;
}
这就是错误:

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)'
对“std::_Rb_tree_const_iterator setFindIf(std:_Rb_tree_const_iterator,std:_Rb_tree_const_iterator,orderscustomerhasopenorder)”的未定义引用

感谢您的帮助。

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

template<class Iterator, class Function>
Iterator setFindIf(Iterator first, Iterator end, Function predicate);
模板
迭代器setFindIf(迭代器优先、迭代器结束、函数谓词);
然后将实现放在一个.cpp文件中,并从另一个.cpp文件调用它。它不能以这种方式使用模板


Mike首先给出了答案,但他只是做了一个评论,所以我还是发布了这篇文章。

我猜您已经将模板实现放在一个源文件中,并试图从另一个源文件调用它;通常,您需要在标题中定义模板。
template<class Iterator, class Function>
Iterator setFindIf(Iterator first, Iterator end, Function predicate);