从包含的对象访问包含对象的成员

如果我有几个级别的对象包含(一个对象定义并实例化另一个定义和实例化另一个对象的对象..),是否可以访问包含上层,包含 - 对象变量和函数的对象? 例:
    class CObjectOne
    {
    public:
       CObjectOne::CObjectOne() { Create(); };

       void Create();

       std::vector<ObjectTwo>vObejctsTwo;
       int nVariableOne;
    }
    bool CObjectOne::Create()
    {
       CObjectTwo ObjectTwo(this);
       vObjectsTwo.push_back(ObjectTwo);
    }

    class CObjectTwo
    {
     public:
       CObjectTwo::CObjectTwo(CObjectOne* pObject)
       {
        pObjectOne = pObject;
        Create();
       };

       void Create();
       CObjectOne* GetObjectOne(){return pObjectOne;};

       std::vector<CObjectTrhee>vObjectsTrhee;
       CObjectOne* pObjectOne;
       int nVariableTwo;
    }
    bool CObjectTwo::Create()
    {
       CObjectThree ObjectThree(this);
       vObjectsThree.push_back(ObjectThree);
    }

    class CObjectThree
    {
     public:
       CObjectThree::CObjectThree(CObjectTwo* pObject)
       {
        pObjectTwo = pObject;
        Create();
       };

       void Create();
       CObjectTwo* GetObjectTwo(){return pObjectTwo;};

       std::vector<CObjectsFour>vObjectsFour;
       CObjectTwo* pObjectTwo;
       int nVariableThree;
    }
    bool CObjectThree::Create()
    {
       CObjectFour ObjectFour(this);
       vObjectsFour.push_back(ObjectFour);
    }

main()
{
    CObjectOne myObject1;
}
比如说,从CObjectThree中我需要访问CObjectOne中的nVariableOne。我想这样做:
int nValue = vObjectThree[index].GetObjectTwo()->GetObjectOne()->nVariable1;
但是,在编译并运行我的应用程序后,我收到内存访问冲突错误。 上面的代码有什么问题(例如,可能包含拼写错误)? 我是否必须动态创建对象而不是静态创建? 有没有其他方法如何实现存储在包含对象中的变量与包含对象?     
已邀请:
当您传递指向容器对象的指针时,此指针有时称为后向指针。我看到这种技术一直在GUI库中使用,其中窗口小部件可能希望访问其父窗口小部件。 话虽这么说,你应该问自己是否有一个更好的设计,不涉及循环依赖(圆形的意义上,容器依赖于容器,容器依赖于容器)。 您不必严格必须动态创建对象以使后向指针技术起作用。您始终可以获取堆栈分配(或静态分配)对象的地址。只要该对象的生命持续存在,而其他对象使用它的指针。但实际上,这种技术通常与动态创建的对象一起使用。 请注意,您也可以使用反向引用而不是后向引用。 我想我知道是什么导致你的分段错误。当您的向量重新分配其内存时(由于增长到更大的大小),旧向量元素的地址将变为无效。但是这些物体的孩子(和孩子们)仍然在他们的背指中保留旧地址! 要使后向指针工作,您必须动态分配每个对象并将其指针存储在向量中。这将使内存管理变得更加混乱,因此您可能希望使用智能指针或boost :: ptr_containers。 看到你在另一个答案中做出的评论后,我现在对你想要完成的事情有了更好的了解。您应该研究通用树结构和复合模式。复合模式通常是我之前引用的小部件示例中使用的模式。     
也许你的所有对象都可以从一个公共接口继承,如:
class MyObject
{
public:
    virtual int getData() = 0;
}
之后,您可以使用stl库中的std :: tree来构建结构。     
正如Emile所说,分段错误是由重新分配引起的。确切地说 - 当本地堆栈对象''this'指针被传递以创建另一个对象时,然后将其复制到向量容器中。然后'Create()'函数退出,堆栈框架对象不再存在,容器中的指针无效。     

要回复问题请先登录注册