14

所以,我有一个向量

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

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

编辑:我处于调试模式

4

2 回答 2

15

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

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

( _Myfirst,在 VC++ 附带的标准库中,恰好是 a 中的成员变量,std::vector它指向序列的第一个元素。所以这只是检查一个向量,就好像它是任何其他对象一样。为了解决这个问题,我必须查看标题...不是很方便,但希望这会对您有所帮助。您可能可以对其他容器执行类似的操作,但您必须查看标题才能确定如何操作。)

(顺便说一句,如果您一直在使用 C#,那么相比之下,C++ 调试器可能看起来不那么流畅,这只是其中的一个例子。我的印象是在CLR 端。)

于 2010-02-01T20:30:56.603 回答
1

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

于 2015-12-16T12:17:31.127 回答