尝试创建字符串映射并插入项将导致无法理解的错误喷射
attempting to create a string map and insert items results in incomprehensible error spew
我想创建一个简单的地图,像这样:
std::map<const std::string, const std::string> mymap;
mymap.insert("foo", "bar");
当我尝试这个时,我得到这个错误:
In file included from /usr/include/c++/4.8.2/map:60:0,
from /home/me/dev/some-project/blocks/mycompany/some-project/main.cpp:11:
/usr/include/c++/4.8.2/bits/stl_tree.h: In instantiation of ‘std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_M_insert_unique_(std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::const_iterator, _Arg&&) [with _Arg = const char&; _Key = const std::basic_string<char>; _Val = std::pair<const std::basic_string<char>, const std::basic_string<char> >; _KeyOfValue = std::_Select1st<std::pair<const std::basic_string<char>, const std::basic_string<char> > >; _Compare = std::less<const std::basic_string<char> >; _Alloc = std::allocator<std::pair<const std::basic_string<char>, const std::basic_string<char> > >; std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator = std::_Rb_tree_iterator<std::pair<const std::basic_string<char>, const std::basic_string<char> > >; std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::const_iterator = std::_Rb_tree_const_iterator<std::pair<const std::basic_string<char>, const std::basic_string<char> > >]’:
/usr/include/c++/4.8.2/bits/stl_tree.h:1722:37: required from ‘void std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_M_insert_unique(_II, _II) [with _InputIterator = const char*; _Key = const std::basic_string<char>; _Val = std::pair<const std::basic_string<char>, const std::basic_string<char> >; _KeyOfValue = std::_Select1st<std::pair<const std::basic_string<char>, const std::basic_string<char> > >; _Compare = std::less<const std::basic_string<char> >; _Alloc = std::allocator<std::pair<const std::basic_string<char>, const std::basic_string<char> > >]’
/usr/include/c++/4.8.2/bits/stl_map.h:671:11: required from ‘void std::map<_Key, _Tp, _Compare, _Alloc>::insert(_InputIterator, _InputIterator) [with _InputIterator = const char*; _Key = const std::basic_string<char>; _Tp = const std::basic_string<char>; _Compare = std::less<const std::basic_string<char> >; _Alloc = std::allocator<std::pair<const std::basic_string<char>, const std::basic_string<char> > >]’
/home/me/dev/some-project/blocks/mycompany/some-project/main.cpp:38:57: required from here
/usr/include/c++/4.8.2/bits/stl_tree.h:1478:63: error: no match for call to ‘(std::_Select1st<std::pair<const std::basic_string<char>, const std::basic_string<char> > >) (const char&)’
= _M_get_insert_hint_unique_pos(__position, _KeyOfValue()(__v));
^
In file included from /usr/include/c++/4.8.2/string:48:0,
from /usr/include/c++/4.8.2/bits/locale_classes.h:40,
from /usr/include/c++/4.8.2/bits/ios_base.h:41,
from /usr/include/c++/4.8.2/ios:42,
from /usr/include/c++/4.8.2/ostream:38,
from /usr/include/c++/4.8.2/iostream:39,
from /home/me/dev/some-project/blocks/mycompany/some-project/main.cpp:10:
/usr/include/c++/4.8.2/bits/stl_function.h:486:12: note: candidates are:
struct _Select1st
^...
它一直在继续,但是我不能从错误输出中判断出问题是什么。
我不能粘贴它的其余部分,因为stackoverflow说我有太多的代码和没有足够的文本
这不是在c++中使用std::map<..>::insert
的方式。您应该插入std::pair<std::string,std::string>(std::string("a"), std::string("b"))
。参见任意c++参考。
您可能不使用std::string("a")
,因为有一个std::string
构造函数接受C字符串。
当你应该使用emplace()
或operator[]
时,你正在使用insert()
。但是,在使用operator[]
时不能使用const std::string
。
std::map<std::string, std::string> mymap;
mymap["foo"] = "bar";
如果你真的想使用insert()
和const std::string
,你必须插入一个std::pair<const std::string, const std::string>
。
std::map<const std::string, const std::string> mymap;
std::pair<const std::string,const std::string> p("foo", "bar");
mymap.insert(p);
还有c++ 11的方法,使用初始化列表:
std::map<const std::string, const std::string> mymap;
mymap.insert({ "foo", "bar" });
您可以使用insert
将std::pair
插入到地图中。
mymap.insert(std::pair<const std::string, const std::string>("a", "b"));
相关文章:
- 由cin中的字符串中未捕获空白引起的分割错误
- 将 GetLastError() 转换为带有错误字符串的异常
- Rapidjson 解析错误:字符串 (207) 中的编码无效
- 尝试对字符串[数组]>>cin 并出现错误(" "字符串下标超出范围")
- 如何检索 DirectX 9 的错误字符串
- 从 C++ => C 包装的 API(多线程)传输错误字符串
- 错误字符串下标超出c++范围
- 获取Openssl证书错误中的错误字符串
- 作为宏参数的安装类型返回错误:字符串常量之前的预期非限定 id
- 语法错误字符串方法C++
- 对于静态错误字符串,哪个的内存/性能效率更高,或者有替代方案
- 使用 strtok() 的错误字符串比较
- C++ 中的运行时错误字符串声明
- 我收到错误:字符串声明上的 C2501
- GCC:为什么一行代码中的错误(字符串和NULL的比较)会导致一长串错误消息
- 错误C2059:语法错误:'字符串'
- 致命错误:字符串:没有这样的文件或目录编译终止
- C++错误:字符串下标超出范围
- 这里面有什么错误?字符串赋值
- 是否有标准的方法来查询EGL错误字符串