在C ++中访问类变量

时间:2012-10-05 12:59:57

标签: c++ class pointers const

  

可能重复:
  Accessing Class Veriables in C++

您好我在C ++中有以下类层次结构

Class1 {  
    vector<Class2> vecClass2;  
}  

Class2 {  
    private:  
        const Class1 * ptrClass1;  
        vector<Class3> vecClass3;  
    public:  
        Class2(const Class1 * ptrClass1);  
        int intC2publicVar;  
        string strC2publicVar;  
}  

Class3 {  
    private:  
        const Class2 * ptrClass2;  
        vector<Class4> vecClass4;  
    public:  
        Class3(const Class2 * ptrClass2);  
}  

Class4 {  
    private:  
        const Class3 * ptrClass3;  
        vector<Class5> vecClass5;  
    public:  
        Class4(const Class3 * ptrClass3);  
        void class4Method() const;  
} 

在class4Method()中,我正在做这样的事情:

void Class4::class4Method() const {  
    const Class2 * pC2 = ptrClass3->ptrClass2;  
    int valClass2 = pC2->intC2publicVar;  
    //Above value is giving wrong value, I have no idea from where it is fetching the wrong value  

    string strVatClass2 = pC2->strC2publicVar;  
    //Above line of code cause run time termination of code and programs stops as soon as this line executes.  

    const Class2 c2 = * pC2;  
    //Above line of code cause run time termination of code and programs stops as soon as this line executes.  

}

我不知道为什么会在Class4的class4Method()中发生这种情况。请帮我解决这个问题。由于这个问题,我的整个项目都被打动了,如果不解决它,我就无法继续前进。

1 个答案:

答案 0 :(得分:2)

我是否正确地假设const Class N-1 * ptrClass N-1 成员指向当前实例的“所有者”并且他们指向的实例位于Class N-2 的向量中?

在这种情况下,您只是忘记了向量具有在内存中移动内容的习惯,因为它们会重新分配以适应新插入的值。不要将指针存储到向量中的对象,而是将对象存储在列表中(并将指针指向列表中的实例,因为它仍然被复制)或存储指针向量(并确保删除析构函数中的元素)。 / p>