如何在 Visual Studio 即时窗口中获取迭代器的元素值? *迭代器不起作用[关闭]

Posted

技术标签:

【中文标题】如何在 Visual Studio 即时窗口中获取迭代器的元素值? *迭代器不起作用[关闭]【英文标题】:How to get the element value of the iterator in Visual Studio immediate window ? *iterator doesn't work [closed] 【发布时间】:2016-01-18 08:48:25 【问题描述】:

更新

似乎我们不能使用*iter 来获取迭代器中元素的值。

那么有没有一种简单的方法来获取 iter 的值?

我不想每次都输入iter->xxx._xxx->_xxx

我尝试使用 AHK 重新映射字符串,有没有更好的方法?


我在 Visual Studio 2013 的即时窗口中使用 *iterator。 迭代器定义为std::vector<std::string>::iterator iter = a.begin()

我想检查iterator指向的字符串的值。

但我得到 错误

没有操作符*匹配操作数

[

这是为什么呢? 或者我怎样才能以简单的方式获得迭代器的值?

【问题讨论】:

索要在你的代码中产生这个错误的那段代码会不会太过分了? 试试这个for(const auto& iter : a) std::cout << iter; @TarikNeaj:我想会的。 @TarikNeaj:附图显示了问题。仅此一次,我认为图像可能是正确的方式(错误文本都是?中文?) @TarikNeaj 我可以通过在红色矩形的第一行输入我想要的东西,iter._Ptr->_Bx.Ptr,这似乎很乏味。我试过*iter它失败了。 【参考方案1】:

* 运算符对迭代器进行了重载,以便让您访问它们的底层值,并保持与指针相同的语义。在某些情况下,指针可以被视为迭代器,例如在迭代 C 样式数组时。这就是您可以在 STL 算法中使用 C 样式数组的原因。

Visual Studio 中的即时窗口似乎不理解 * 运算符对于您的迭代器类型已重载。这就是您收到此错误的原因。

【讨论】:

那么有没有更好的方法来获取迭代器中的元素值? 有一种方法可以为 watchesdebug value popups [in this thread] (***.com/a/111634/4515566) 定义您自己的查看器,但我'我不知道它适用于 立即 窗口,但我想如果您只想查看值,这不是问题,对吧? @lizhe 你试过了吗? 是的,非常感谢您的帮助【参考方案2】:

基本上有no solution,它是Visual Studio 在上个世纪一直停留的领域之一。显然有太多脆弱的技术,尝试修复 Visual Studio 的一个位(编辑并继续)会破坏另一个(调试器可视化)

【讨论】:

以上是关于如何在 Visual Studio 即时窗口中获取迭代器的元素值? *迭代器不起作用[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Linq 扩展方法在 Visual Studio 2015 即时窗口中不可用

Visual Studio 2008/10 的即时窗口中的“搜索内存”是不是损坏?

Visual Studio 即时窗口 - 不允许使用 Lambda 表达式 - 是不是有解决方法或替代方法? [关闭]

如何让 Visual Studio 在 TFS 获取后打开解决冲突窗口

创建 Visual Studio 扩展时如何获取源代码管理历史记录窗口中的选定项目?

立即窗口 VIsual studio 调试 undefined