【发布时间】:2012-03-04 06:52:22
【问题描述】:
我有一张地图,其值为 std::pair。
编译器在尝试设置迭代器时抱怨如下,但我不明白为什么:
src/DBConnector.cpp: 在成员函数‘int DBConnector::createGenericInsert(std::string, std::map<:basic_string std::char_traits>, std::allocator
>, std::pair , std::allocator > >, std::less<:basic_string std::char_traits>, std::allocator > >, std::allocator<:pair std::basic_string std::char_traits>, std::allocator >、std::pair 、std::allocator > > > > >、std::string&)’: src/DBConnector.cpp:354: 错误: 中的‘operator=’不匹配 'l_oIterEnd = p_mapValues.std::map<_key _tp _compare _alloc>::end with _Key = std::basic_string , std::allocator >, _Tp = std::pair , std::allocator >>, _Compare = std::less<:basic_string std::char_traits>, std::allocator >>, _Alloc = std::allocator<:pair std::basic_string std::char_traits>, std::allocator >, std::pair , std::allocator > > > >’ /usr/include/c++/4.4/bits/stl_map.h:251:注意:候选人是: std::map<_key _tp _compare _alloc>& std::map<_key _tp _compare _alloc>::operator=(const std::map<_key _tp _compare _alloc>&) [with _Key = std::basic_string , std::allocator > , _Tp = std::pair , std::allocator >>, _Compare = std::less<:basic_string std::char_traits>, std::allocator >>, _Alloc = std::allocator<:pair std::basic_string std::char_traits>, std::allocator >, std::pair , std::allocator > > > >]
我的功能是这样的:
int DBConnector::createGenericInsert ( std::string p_sTable , std::map<std::string , std::pair<int,std::string> > p_mapValues , std::string & po_sInsert ) {
std::map<std::string,std::pair<int,std::string> > l_oIter;
std::map<std::string,std::pair<int,std::string> > l_oIterEnd;
std::string s_Fieldnames;
l_oIterEnd = p_mapValues.end(); // This is line 354
l_oIter = p_mapValues.begin();
s_Fieldnames += l_oIter.first();
...
}
这里有什么问题?地图可以包含 std::pairs 吗? (此外,地图可以包含持有不同类型的键吗?)
【问题讨论】:
-
您将
l_oIter声明为std::map,而不是迭代器...