返回迭代器时"undefined reference to std::_Rb_tree_const_iterator"

"undefined reference to std::_Rb_tree_const_iterator" when returning iterator

本文关键字:iterator Rb tree const to 迭代器 undefined reference 返回 std      更新时间:2023-10-16

我想实现一个简单的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)'

看起来像是在头文件中声明了模板:

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

然后将实现放在。cpp文件中,并从另一个。cpp文件中调用它。而对于模板则不是这样。

Mike先给出了他的答案,但他做了一个评论,所以我还是把这个贴出来。