为了能够检查向量中包含的类的数据成员,我需要在 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 中输入啥?的主要内容,如果未能解决你的问题,请参考以下文章

如何处理 C++ 17 中变体中包含的类型的无意义方法

如何子类化和重新实现命名空间中包含的类?

去除站点的数据库字段中包含的关键词,并恢复

如何从头文件中访问类的私有成员?

如何使用向量中包含的 double[4][4] 数组?

类和对象