为了能够检查向量中包含的类的数据成员,我需要在 autoexp.dat 中输入啥?
Posted
技术标签:
【中文标题】为了能够检查向量中包含的类的数据成员,我需要在 autoexp.dat 中输入啥?【英文标题】:What do I need to enter in autoexp.dat in order to be able to inspect a data member of a class contained in a vector?为了能够检查向量中包含的类的数据成员,我需要在 autoexp.dat 中输入什么? 【发布时间】:2012-02-05 05:47:05 【问题描述】:首先,道歉:我已经阅读了一些关于在 VS 中检查模板的先前帖子(例如this one);不幸的是,它们要么不包含我需要的信息,要么(更有可能)我无法从答案中成功提取信息。我希望我不是在问一些之前已经被问过很多次的太明显的问题。
我有一个包含 SomeClass 类对象的向量:
class SomeClass
int a, b;
//constructor..
;
std::vector<SomeClass> vec;
//vec.push some elements..
现在我希望能够在 VS2010 调试器中观看 vec[0].a, vec[1].a, ....。当我天真地尝试这个时,我当然会得到:
vec[0].a CXX0058: Error: overloaded operator not found
当我尝试上面链接的问题的答案中提供的解决方案之一时,我得到:
((vec)._Myfirst)[0].a CXX0025: Error: operator needs class/struct/union
所以我知道我需要修改 autoexp.dat。我尝试这样做了一段时间,但没有任何成功。
如果有人能写出我需要添加到 autoexp.dat 的哪一行以便能够检查这些变量,我将不胜感激(我已经觉得我在这方面花费了太多时间 - 并且所以如果我能得到一个明确的解决方案而不是提示或链接,我将非常感激。
感谢您的宝贵时间。
【问题讨论】:
【参考方案1】:让SomeClass
定义如下:
class SomeClass
public:
SomeClass(int a, int b) : a(a), b(b)
int a, b;
;
你说你有“一个向量数组”,但你只有SomeClass
类型的对象的向量:
std::vector<SomeClass> vec;
SomeClass a(1,2);
vec.push_back(a);
std::cout << vec[0].a;
在这种情况下,您可以使用数组下标运算符 ([ ]) 直接访问它们。如果您确定索引 0 处有对象,那么vec[0].a
就可以了。
如果你需要一个向量数组,它看起来像这样:
std::vector<SomeClass> vec[10];
SomeClass a(1,2);
vec[3].push_back(a);
std::cout << vec[3][0].a;
您将 vec
声明为 10 个向量的数组,然后在 4.vector 的末尾(在索引 3 处)推送一个元素 a
。通过vec[3][0].a
,您正在访问索引 3 处向量的索引 0 处元素的属性 a。
这两个例子的输出是:1
对于调试:
在第二个示例中,当我在 vec[3].push_back(a);
行切换断点时,我选择 Debug
配置,然后按 F5,当它在我的断点处停止时:
-
按 Ctrl + D、Q
将
vec[7]
写入表达式字段
选择添加手表
看看 Visual Studio 在 Watch 1 窗口中的索引 7 处显示的矢量是多么可爱
希望对你有帮助
【讨论】:
感谢您的回答。首先,我犯了一个愚蠢的错误,将其称为“向量数组”——我的意思当然只是一个向量。感谢您发现这一点,我编辑了我的问题以反映变化。代码虽然与我的问题的原始表述相同。我的问题在于调试(在 vs10 中):将 vec[7] 或 vec[7].a(如您的示例)添加到监视列表时,我收到错误“CXX0058:错误:未找到重载运算符”。它是否适合您而无需对调试器设置进行任何更改? 如果你只有一个简单的向量并且你在Debug配置下运行你的程序,你应该打开“Autos”窗口并且应该正确显示向量vec
。
这很奇怪 - 我看到 vec
但它肯定没有正确显示,例如如果 vec.size()==3 则调试器显示 vec 如下:[3](a=??? b=??? ,a=??? b=???? ,a=??? b=??? )
。我想知道这是否只发生在我身上。通过阅读其他帖子,我认为这是模板类型的 VS 调试器的标准行为,除非您调整调试器以识别您的类型。也许我误解了。稍后我将尝试在另一台机器上运行相同的代码。不管怎样,感谢您的帮助!
不客气。如果您接受我的回答或编辑您的问题并提供更多信息,我将不胜感激,以便我真正了解您在处理什么。
您认为我应该添加哪些进一步的信息?我举的例子不是我的问题的简化版本;即使对于这个简单的类,调试器也确实给出了我在问题中(以及我在此处的最后一条评论中)编写的错误代码。也许我应该补充一下,我正在 Win7 x64 机器上使用 VS2010 进行编译。以上是关于为了能够检查向量中包含的类的数据成员,我需要在 autoexp.dat 中输入啥?的主要内容,如果未能解决你的问题,请参考以下文章