了解Visual Studio 2010中的Watch窗口

时间:2014-12-12 11:19:21

标签: c++ debugging watch

我无法理解方括号内的对象部分是什么意思([bsm :: Material]见下图)。我希望MaterialLayer类型的对象ml只由Object类型(基类)+两个字段厚度和材质(指向Material的指针)组成。

那么,Visual Studio 2010在Watch窗口中显示的方括号之间的部分是什么?

enter image description here

以下是Material,Object和MaterialLayer类的定义:

class Object
{

public:
    // Methods
};


class Material : public Object
{
    int type;
    std::string name;
    std::vector<Property *> properties;

public:
    // Methods
};


class MaterialLayer : public Object
{
    double thickness;
    Material * material;

public:
    // Methods
};

1 个答案:

答案 0 :(得分:3)

看起来ml被声明为bsm::MaterialLayer*,但是通过类型转换为它分配了类型为bsm::Material*的指针:

bsm::MaterialLayer *ml;
bsm::Material *foo;
ml = (bsm::MaterialLayer *)foo;

这在编译时不会产生类型转换错误,但几乎肯定会导致thicknessmaterial中的无意义错误。

但是,由于他们都共享一个共同的父母,因此Watch会在方括号中显示其真实的孩子。