Visual Studio 手表中的向量“无运算符“[]”与这些操作数匹配错误

Posted

技术标签:

【中文标题】Visual Studio 手表中的向量“无运算符“[]”与这些操作数匹配错误【英文标题】:Vector 'no operator "[]" matches these operands' error in Visual Studio watch 【发布时间】:2013-07-21 21:21:14 【问题描述】:

在 Visual Studio 2012 中单步执行以下示例代码时:

std::vector<int> test;
test.resize(1);
test[0] = 4;

我可以在测试中设置一个手表并检查它的第 0 个元素。但是,如果我在 test[0] 上设置监视,我会收到错误“没有运算符“[]”与这些操作数匹配”:

如何直接检查 test[0] 的值?

【问题讨论】:

你是在 Release 还是 Debug 模式下编译的? 调试,好问题。 请注意,当您调用resize 时,迭代器和引用通常会失效。 @KerrekSB 通常在这种情况下我可能会使用push_back,但我想通过下标显示分配。 可能重复:***.com/questions/104959/… 【参考方案1】:

如果你使用2D vecotr> dp,并且你想在VS2013的watch window中获取dp[i][j],你可以使用(dp.运算符 [ ] (i)).运算符 [ ] (j)

向量>dp(n,向量(n,“”));

(dp.operator [ ] (i)).operator [ ] (j)

【讨论】:

【参考方案2】:

我找到了一种不依赖于类内部的解决方案。操作员调用的扩展形式似乎对我有用。在这种情况下,它是以下代码:

v.operator[](0)

我在 Visual C++ 2012 中对其进行了测试。

【讨论】:

在 VS2013 上,它只显示一次值并且不再更新【参考方案3】:

正如@NateKohl 所说,在 Visual Studio 2012(可能还有更早的版本)中,v._Myfirst 提供了一个指向底层矢量数据的指针,让您可以像查看数组一样查看矢量。

【讨论】:

【参考方案4】:

Visual Studio 不支持 stl 容器的 operator[] 重载,您只需在调试时通过从列表中选择您感兴趣的元素手动设置监视。

编辑:如果要检查向量内的 T 对象,请将其分配给 T 对象并在其上设置监视

【讨论】:

如果向量有 10000 个元素,而您想查看第 5000 个元素怎么办?有没有方便的方法来做到这一点? 很遗憾,恐怕您第一次必须手动操作。 关于您的编辑:如果您正在单步执行 DLL,那么这不是一个选项。在这种情况下你会怎么做? 我认为v._Myfirst[0] 允许您观看例如v 的第 0 个元素(其中 _Myfirst(可能是 _First_M_start,取决于您的 VS 版本)是向量内部存储的名称) 不确定是不是你的意思,但如果你不知道类型,你可以用自动类型分配它

以上是关于Visual Studio 手表中的向量“无运算符“[]”与这些操作数匹配错误的主要内容,如果未能解决你的问题,请参考以下文章

创建我的第一个向量时出错 [Visual Studio 2013]

Visual Studio 2012 中 Eigen 类型向量的自动向量化效果不佳

如何在带有 Visual Studio 的 dll 导出类中使用唯一指针向量

向量查找函数在 Visual Studio 中工作但在 GCC 中不工作

Visual Studio 2010 远程调试非常慢(跨域,通过 ***)

类似于 Mole 的 Visual Studio 可视化工具 [关闭]