c++ - 无序映射的迭代器向量 - 编译错误
问题描述
各位程序员
我想为满足某些标准的元素创建一个迭代器向量,用于无序映射。我为此编写了一个函数,但它无法编译,而且我不明白代码有什么问题:
class Cache
{
public:
Cache()
{}
template<typename Functor>
std::vector<Transaction::TransactionsContainer::iterator> getSpecificOrders(Functor criterion) const;
protected:
Transaction::TransactionsContainer transactions;
};
template<typename Functor>
std::vector<Transaction::TransactionsContainer::iterator> Cache::getSpecificOrders(Functor criterion) const
{
std::vector<Transaction::TransactionsContainer::iterator> foundOrders;
for (auto it = transactions.begin(); it != transactions.end(); ++it)
{
if (criterion(it->second))
{
foundOrders.push_back(it);//this line fails to compile
}
}
return foundOrders;
}
编译器报告转换失败的错误;示例在这里 https://onlinegdb.com/SyHXHFm2P
请解释我做错了什么。
错误信息:
In file included from main.cpp:9:0:
cache.h: In member function ‘std::vector<std::__detail::_Node_iterator<std::pair<const std::basic_string<char>, Transaction::Order>, false, true> > Cache::getSpecificOrders(Functor) const’:
cache.h:25:36: error: no matching function for call to ‘std::vector, Transaction::Order>, false, true> >::push_back(std::__detail::_Node_const_iterator, Transaction::Order>, false, true>&)’
foundOrders.push_back(it);
^
In file included from /usr/include/c++/6/vector:64:0,
from cache.h:2,
from main.cpp:9:
/usr/include/c++/6/bits/stl_vector.h:914:7: note: candidate: void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = std::__detail::_Node_iterator, Transaction::Order>, false, true>; _Alloc = std::allocator, Transaction::Order>, false, true> >; std::vector<_Tp, _Alloc>::value_type = std::__detail::_Node_iterator, Transaction::Order>, false, true>]
push_back(const value_type& __x)
^~~~~~~~~
/usr/include/c++/6/bits/stl_vector.h:914:7: note: no known conversion for argument 1 from ‘std::__detail::_Node_const_iterator, Transaction::Order>, false, true>’ to ‘const value_type& {aka const std::__detail::_Node_iterator, Transaction::Order>, false, true>&}’
/usr/include/c++/6/bits/stl_vector.h:932:7: note: candidate: void std::vector<_Tp, _Alloc>::push_back(std::vector<_Tp, _Alloc>::value_type&&) [with _Tp = std::__detail::_Node_iterator, Transaction::Order>, false, true>; _Alloc = std::allocator, Transaction::Order>, false, true> >; std::vector<_Tp, _Alloc>::value_type = std::__detail::_Node_iterator, Transaction::Order>, false, true>]
push_back(value_type&& __x)
^~~~~~~~~
/usr/include/c++/6/bits/stl_vector.h:932:7: note: no known conversion for argument 1 from ‘std::__detail::_Node_const_iterator, Transaction::Order>, false, true>’ to ‘std::vector, Transaction::Order>, false, true> >::value_type&& {aka std::__detail::_Node_iterator, Transaction::Order>, false, true>&&}’
解决方案
getSpecificOrders
被宣布const
;因此transactions
在该函数中是一个const
对象;因此transactions.begin()
返回Transaction::TransactionsContainer::const_iterator
。您正在尝试将其添加到 的向量中Transaction::TransactionsContainer::iterator
,但前者不可转换为后者。
推荐阅读
- python - 如何向工厂方法添加提示?
- python - 用 Ridge 在 gridsearchcv 中选择最佳模型的标准是什么
- python-3.x - Beautiful Soup 通过 id 找到 td 为什么这不起作用
- python - 无法使用子进程执行 sudo 命令
- sql-server - Snowflake SSRS ODBC error : No active warehouse selected in the current session. Select an active warehouse with the 'use warehouse' command
- linux - Ubuntu 中的 GitHub 克隆问题
- flutter - Dart/Flutter 中的多态性
- validation - Kotlin 数据类强制值约束
- prestashop - 在 Prestashop 中编辑页脚链接的正确 .tpl 文件是什么
- angular - 如何根据环境而不是目标从 Angular 构建中添加或删除文件/代码?