为什么我不能在立即窗口中索引std::vector?

15

那么,我有一个向量

 std::vector<std::string> lines. 

我填充了这个向量,可以像这样访问它

 std::string temp = lines[0];

然而,在立即窗口中,两个

 lines[0] - error:overloaded operator not found
并且
 lines.at(0) - error:symbol is ambiguous

完全不工作。使用C++的即时窗口有什么技巧吗?我主要来自C#背景,那里一切都很好用(而且在即时窗口中有智能感知)。我并不指望C++会很棒,但我认为它至少可以处理除了整数以外的东西。有人能告诉我我做错了什么吗?谢谢。

编辑:我应该明确一点,即时窗口几乎什么都不起作用,这只是一个简单的例子

编辑:我处于调试模式

2个回答

15

立即窗口和监视窗口不支持重载运算符。在打印标准容器时,有一些支持以合理的方式打印它们的整个内容(例如,参见 http://www.virtualdub.org/blog/pivot/entry.php?id=120 ),但这并不包括能够在它们上使用operator[]

希望在调试器的后续版本中会得到改善,但目前为止,要查看向量的第i个元素,请尝试lines._Myfirst[i]

(在VC ++附带的标准库中,_Myfirst恰好是指向序列第一个元素的std::vector成员变量。因此,这仅仅是将向量作为任何其他对象进行检查。为了弄清楚这一点,我不得不查看头文件... 不太方便,但希望这会帮助你。您可能可以通过查看头文件来找出如何处理其他容器,但需要自己动手。)

(顺便说一句,如果你一直在使用C#,那么相比之下,C++调试器可能会显得不太流畅,这只是其中一个例子。我有印象CLR方面已经做了更多的工作。)

在观察窗口和立即窗口中调用成员函数似乎也行不通。 (我已更新我的答案以提到缺乏流畅性 - 这是第二个例子!)虽然通常可以调用独立函数。令人恼火,但您可能会习惯它 - 当然您没有选择 :) (希望以后的修订将改善本地调试方面; 它已经完全可用,但仅缺乏CLR方面的光泽。) - please delete me
.at() 可能会失败的原因相同:它被重载了。 - MSalters
这太荒谬了,我还不如直接用VSCode进行C++开发。 - Bersan

1

在现今的Visual Studio版本中(例如2013/2015),std::vector变量的_Myfirst成员变量已不再存在。使用_C_begin代替 - 对于给定的示例,例如使用lines._C_begin[i]。


1
你能否详细阐述你的答案或者举个例子让它更加完整?这样可以帮助提问者更清楚地理解你的意思。 - itsols

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接