2013-06-18 36 views
0

我想实现一个简单的std :: find_if()函数使用(我不允许在我的作业中使用它)。“未定义的参考std :: _ Rb_tree_const_iterator”当返回迭代器

这是我实现:

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)' 

感谢帮手。

+2

我的猜测是你已经将模板实现放在源文件中,并试图从不同的源文件中调用它。 [你不能这样做](http://stackoverflow.com/questions/495021);通常,您需要在标题中定义模板。 –

回答

0

看起来你宣布一个头模板:

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

,然后把实施.cpp文件,并且从不同的.cpp文件调用它。它不能以模板的方式工作。

迈克第一次拿到了他的回答,但是他发表了评论,所以我发布了这个。