返回迭代器时“对std :: _ Rb_tree_const_iterator的未定义引用”

时间:2013-06-18 13:27:53

标签: 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) {
        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)'

感谢帮助者。

1 个答案:

答案 0 :(得分:0)

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

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

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

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