【发布时间】:2013-06-18 13:27:52
【问题描述】:
我正在尝试实现一个简单的 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)'
感谢帮助。
【问题讨论】:
-
我的猜测是您已将模板实现放在源文件中,并试图从不同的源文件中调用它。 You can't do that;通常,您需要在标题中定义模板。
标签: c++ templates stl iterator set