-1

当这些实例(或引用)在与定义嵌套结构的范围不同的范围内声明时(例如 for 循环),VS2008 C++ 调试器似乎无法/不愿意查看函数内定义的结构实例。知道为什么会这样吗?

void MyClass::doSomething()
{
    struct NestedStruct
    {
        int usefulMetaInfo
        vector<double> data;
    };

    //WORKS - Debugger can see inside ns
    NestedStruct ns;
    ns.data.push_back(1);

    //FAILS - Debugger cannot see inside ns
    for{int i=0;i<1;i++}
    {
        NestedStruct ns;
        ns.data.push_back(1);
    }

} 
4

2 回答 2

1

此类结构具有内部链接,几乎可以肯定调试器无法查看它,原因与将它们用作模板类型参数是非法的相同。

您在这里唯一的解决方案可能是将结构放入例如详细名称空间以提供外部链接。

于 2013-05-16T14:05:05.740 回答
0

这个问题的解决方法很简单。

只需确保 NestedStruct 的所有句柄都在与 NestedStruct 的定义相同的范围内声明。请注意,这可能通常需要使用指针句柄而不是引用(例如,当您希望迭代 NestedStruct 的容器时)。

void MyClass::doSomething()
{
    struct NestedStruct
    {
        int usefulMetaInfo
        vector<double> data;
    };

    NestedStruct ns*; //declare here
    for{int i=0;i<1;i++}
    {
        //NestedStruct ns*; //DON'T declare here
        ns = someContainer[i];
        ns->data.push_back(1);
    }

} 

这将允许您将结构整齐地封装在它所属的位置(实现细节),同时仍然能够使用 VS2008 调试器对其进行检查。您放弃了对范围的一些控制,但这是现有弊端中最好的。

为什么调试器有这个问题我不知道......

于 2013-05-16T18:32:27.953 回答