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

时间:2010-02-01 20:13:36

标签: c++ visual-studio stdvector immediate-window

所以,我有一个载体

 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 ++会很棒,但我认为它可以用于除了int之外的东西。谁能告诉我我做错了什么?感谢。

编辑:我应该清楚,在即时窗口中没有任何实际工作,这只是一个简化的例子

编辑:我处于调试模式

2 个答案:

答案 0 :(得分:15)

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

希望在调试器的后续版本中对此进行改进,但是现在,要查看向量的第i个元素,请尝试lines._Myfirst[i]

_Myfirst,在VC ++附带的标准库中,碰巧是std::vector中指向序列的第一个元素的成员变量。所以这只是检查一个向量如果它是任何其他对象。为了解决这个问题,我不得不看看标题......不是很方便,但希望这会对你有所帮助。你可以做一些与其他容器类似的东西,但是你必须要查看标题以了解如何。)

(顺便说一下,如果你一直在使用C#,那么C ++调试器通常可能看起来不那么光滑,这只是其中的一个例子。我得到的印象还有更多的工作放入CLR方面。)

答案 1 :(得分:1)

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