【发布时间】:2017-09-13 19:45:23
【问题描述】:
我有一个 C++ 代码,我在其中实例化一个 unordered_map,然后使用 cout 打印它的值。这工作正常。但是,当我尝试在 gdb 中运行它并打印 unordered_map 的值时,这给了我错误。下面是sn-p的代码:
std::unordered_map<std::string,int> mymap = {
{ "Mars", 3000},
{ "Saturn", 60000},
{ "Jupiter", 70000 } };
std::cout<< mymap.at("Mars");
std::cout<< mymap["Mars"];
上面的两个 cout 语句都打印键“Mars”的 unordered_map 值。但是,当我使用 gdb 然后尝试使用以下语句在键“Mars”处打印 mymap 的值时,我得到了错误。
(gdb) print mymap.at("Mars")
Cannot resolve method std::unordered_map<std::basic_string<char,
std::char_traits<char>, std::allocator<char> >, int,
std::hash<std::basic_string<char, std::char_traits<char>,
std::allocator<char> > >, std::equal_to<std::basic_string<char,
std::char_traits<char>, std::allocator<char> > >,
std::allocator<std::pair<std::basic_string<char, std::char_traits<char>,
std::allocator<char> > const, int> > >::at to any overloaded instance
(gdb) print mymap["Mars"]
Cannot resolve function operator[] to any overloaded instance
当我使用 gdb 时,我不明白什么是错误的。
我尝试在 gdb 中使用 whatis mymap 来查看 mymap 是否存在于当前上下文中,并且它表明它存在。另外,我尝试初始化一个 int 变量并在 gdb 中打印它并打印它。我不明白 unordered_map 有什么问题。
我正在使用下面的语句来生成可执行文件
gsrivas4@TitanX01:~/lcode1$ g++ -std=gnu++11 -O0 -g test1.cpp -o test1.out
【问题讨论】:
-
这绝对是我注意到的。 gdb似乎在解析重载运算符时遇到问题,经常找不到常用函数的定义
-
可能相关的stackoverflow.com/questions/34894381/… - 并在 prettyprinting 上查找其他答案。
-
gdb 不是 C++ 编译器,因此虽然它确实了解很多 C++,但它没有内置所有 C++ 规则(在这种情况下,它似乎无法确定它应该创建一个 std ::string 来自字符串文字的临时对象,然后解决映射的适当重载)
-
感谢您的回复。基于 cmets,我不应该尝试使用 unordered_map 操作 []。相反,我可以使用 gdb 中的 print mymap 打印地图的所有成员。
标签: c++ c++11 gdb unordered-map