-2

重複の可能性:
C++ でのクラス Veriable へのアクセス

こんにちは、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() でこれが発生する理由がわかりません。これを解決する方法を教えてください。この問題が原因でプロジェクト全体が打撃を受け、解決せずに先に進むことができませんでした。

4

1 に答える 1

2

const ClassN-1 * ptrClassN-1メンバーは現在のインスタンスの「所有者」へのポインターであり、それらが指すインスタンスはClassN-2のベクトルに存在すると正しく想定していますか?

その場合、ベクトルには、新しく挿入された値に対応するために再割り当てするときに、コンテンツをメモリ内で移動するというこの習慣があることを単に忘れてしまいます。オブジェクトへのポインタをベクトルに格納しないでください。オブジェクトをリストに格納するか(リスト内のインスタンスへのポインタを取得します。これはまだコピーされているため)、ポインタのベクトルを格納します(デストラクタの要素を削除してください)。

于 2012-10-05T13:39:42.110 に答える