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(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 中不工作