Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 迭代器到无序映射的向量-编译错误_C++_Stl_Containers - Fatal编程技术网

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和错误消息作为逐字文本放入您的问题中。不接受指向外部存储库的链接。仍然缺少!请再说一遍。你没看到链接吗?我告诉过你链接是不可接受的。链接可能会腐烂,但这个网站应该是独立的。你似乎完全没有抓住要点。我不能。。我们对所有
事务
名称空间内容的完整定义不感兴趣,而是对一个复制特定错误消息的示例感兴趣。当我将错误消息拆分为单独的行时,我自己就想到了这一点,但无论如何,我会为您提供答案。