C++ 迭代器到无序映射的向量-编译错误
嘿,程序员们 我想为满足某些条件的元素创建一个到无序映射的迭代器向量。我已经为此编写了一个函数,但它没有编译,我不明白代码有什么问题:C++ 迭代器到无序映射的向量-编译错误,c++,stl,containers,C++,Stl,Containers,嘿,程序员们 我想为满足某些条件的元素创建一个到无序映射的迭代器向量。我已经为此编写了一个函数,但它没有编译,我不明白代码有什么问题: class Cache { public: Cache() {} template<typename Functor> std::vector<Transaction::TransactionsContainer::iterator> getSpecificOrders(Functor criterion
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;
}
类缓存
{
公众:
缓存()
{}
模板
向量getSpecificOrders(函子标准)常量;
受保护的:
Transaction::TransactionContainer事务;
};
模板
std::vector Cache::getSpecificOrders(函子标准)常量
{
std::矢量命令;
for(自动it=transactions.begin();it!=transactions.end();+it)
{
if(标准(it->second))
{
foundOrders.push_back(it);//此行无法编译
}
}
退回订单;
}
编译器报告转换失败的错误;这里就是一个例子
请解释我做错了什么
错误消息:
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>&&}’
在main.cpp:9:0中包含的文件中:
cache.h:在成员函数“std::vector cache::getSpecificOrders(Functor)const”中:
cache.h:25:36:错误:调用“std::vector,Transaction::Order>,false,true>>::push_back(std::_detail:::_Node_const_迭代器,Transaction::Order>,false,true>&)”时没有匹配的函数
创建订单。推回(it);
^
在/usr/include/c++/6/vector:64:0中包含的文件中,
从缓存h:2,
来自main.cpp:9:
/usr/include/c++/6/bits/stl_vector.h:914:7:注:候选:void std::vector::push_back(const-value_-type&)[with Tp=std::u-detail::u-Node_迭代器,事务::Order>,false,true>Alloc=分配器,事务::Order>,false,true>;std::vector::value_type=std:u-type=std:u-detail:u-detail:::::u-detail:u-detail:u-Order>,事务
推回(常量值类型和x)
^~~~~~~~~
/usr/include/c++/6/bits/stl_vector.h:914:7:注意:参数1从“std::_detail::_Node_const_iterator,Transaction::Order>,false,true>”到“const value类型&{aka const std:u detail::_Node_iterator,Transaction::Order>,false,true>&}
/usr/include/c++/6/bits/stl_vector.h:932:7:注:候选:void std::vector::push_back(std::vector::value_type&)[with Tp std::u detail::u Node_iterator,Transaction::Order>,false,true>;Alloc=std::分配器,事务::Order>,false,true>;std::vector value_type=std:u detail:u detail:u detail:::u detail:u迭代词,事务::Order>,false,true>]
推回(值类型和值x)
^~~~~~~~~
/usr/include/c++/6/bits/stl_vector.h:932:7:注意:参数1从'std::_detail::_Node_const_迭代器,Transaction::Order>,false,true>'到'std::vector,Transaction::Order>,false,true>::value_type&{aka std:u detail:::_Node_迭代器,Transaction::Order>,false,true>&}
getSpecificOrders
被声明为const
;因此,该函数中的transactions
是const
对象;因此,transactions.begin()
返回Transaction::TransactionContainer::const\u迭代器
。您正试图将其添加到Transaction::TransactionContainer::iterator
的向量中,但前者不能转换为后者。请按照此处的要求将a和错误消息作为逐字文本放入您的问题中。不接受指向外部存储库的链接。仍然缺少!请再说一遍。你没看到链接吗?我告诉过你链接是不可接受的。链接可能会腐烂,但这个网站应该是独立的。你似乎完全没有抓住要点。我不能。。我们对所有事务
名称空间内容的完整定义不感兴趣,而是对一个复制特定错误消息的示例感兴趣。当我将错误消息拆分为单独的行时,我自己就想到了这一点,但无论如何,我会为您提供答案。