2012-10-05 120 views
-2

可能重复:
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. 

} 

我不知道为什么这class4Method)CLASS4的正在发生的事情(。请帮我解决这个问题。我的整个项目都因这个问题而受到打击,如果不解决它,我就无法继续前进。

+0

你初始化了数据成员指针吗? – juanchopanza

+2

你的方法的第一行:'const Class2 * pC2 = ptrClass3-> ptrClass2;'你访问'Class3'的私有成员。这不应该编译。之后的任何事情都从运行时的角度来看。 – Fiktik

+0

同意,我不认为你发布了你正在“运行”的代码:p另外,除非你在类之间使用继承,否则你应该避免谈论heirarchies(你有没有机会忘记把继承关系放在这个?)。 –

回答

2

做我认为正确的const ClassN-1* ptrClassN-1成员是指向当前实例的“所有者”和实例它们指向生活在Class矢量N- 2

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

+0

+1,这是一个似是而非的建议。 – john

+0

@Jan是的,你的想法是正确的。但还有一件事。对象只存储在向量中一次,向量不会随后更新,只有指针被检索。它可以导致这个问题吗? –

+0

@Danish取决于你如何填充矢量。如果你只是在对象之后push_back对象...那么肯定是的。 – Fiktik