返回迭代器时"undefined reference to std::_Rb_tree_const_iterator"
"undefined reference to std::_Rb_tree_const_iterator" when returning iterator
我想实现一个简单的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先给出了他的答案,但他做了一个评论,所以我还是把这个贴出来。
相关文章:
- 在调试模式下引发C++ "deque iterator not dereferencable"异常
- std::iterator::reference 必须是引用吗?
- 为什么unordered_set<string::iterator>不起作用?
- 造成致命错误:boost/fusion/iterator/equal_to.hpp 没有这样的文件或目录
- Visual accept std::string from std::byte iterator
- 什么是"std::set<int,int>::iterator"?
- 从 std::vector 中删除项目时"Iterator not incrementable"
- 如何从 boost::container::vector<std::string>::iterator 访问索引和对象?
- 空集"Out of bound iterator"
- 如何使用set<pair<int,int> >::iterator itrator it迭代set<pair<int,int> >st中的值?
- 给定一个类型为 Container:<T>:Iterator 的函数参数,如何为某些类型的 T 实现特定的重载?
- 带升压async_read_some "String iterator not dereferncable"
- C++为什么"deque iterator not dereferencable "
- 错误:与'operator='不匹配(操作数类型为"std::map<int、double>::iterator
- 自动,错误:MAP ITERATOR没有名为“ First”的成员
- set<shared_ptr<T>>::iterator to set<shared_ptr<t const>>::const_iterator
- 标准::复制失败,"cannot seek vector iterator after end"
- 如何将STD :: Iterator与基本类型Uint8_t**使用
- Gnu 的 <Iterator>reverse_iterator::运算符>和代理迭代器
- "Deque iterator not dereferencable"错误