我正在尝试实现一个简单的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)'
感谢帮助者。
答案 0 :(得分:0)
看起来你在标题中声明了模板:
template<class Iterator, class Function>
Iterator setFindIf(Iterator first, Iterator end, Function predicate);
然后将实现放在.cpp文件中,并从另一个.cpp文件中调用它。它不适用于模板。
迈克首先得到了他的回答,但是他发表了评论,所以无论如何我发布了这个。