2010-12-22 13 views
0

CGrect変数を持つC++クラスがあり、アクセスしようとするとsegfaultが発生します。(iphone)C++クラス内のCGRectメンバー変数へのアクセス方法は?

class Parent 
{ 
//with some virtual functions/dtors 
}; 

class Child 
{ 
    public: 
    void SetRect(CGRect rect) { mRect = rect; } 
    CGRect GetRect() { return mRect; } 
    int GetIndex() { return mIndex; } 

    private: 
    CGRect mRect; 
    int mIndex; 
}; 

私は、オブジェクトCコードから

CGRect rect = childPtr->GetRect(); 

をやっているし、それがセグメンテーションフォールト。
私は呼び出し直前に* childPtrを出力し、rectは意図したデータ値で正常に見えます。

int index = childPtr->GetIndex(); 

同じオブジェクトcコード(*。mm)からはうまく動作しますが、

なぜ私はsegfaultsを取得していますか?これは、仮想関数とは何かを持っている

から

  • 編集ありがとうございます。

    (GDB)のp singlePuzzlePiece-> GetRect()

    プログラムは、信号EXC_BAD_ACCESSを受け、メモリにアクセスできませんでした。 理由:アドレス:0x00000001のKERN_PROTECTION_FAILURE 0x00000001? () アドレス0x1のメモリにアクセスできない デバッグ中のプログラムは、GDBから呼び出された関数中に通知されました。 GDBは、信号が受信されたフレームに残ります。 この動作を変更するには、「set unwindonsignal on」を使用してください。 (0x1の)関数を含む式の評価は中止されます。 (gdb)

    何とか関数が正しくコンパイルされていませんか? RECT変数に取得するための客観Cで

+0

あなたが私たちに与えたコードを見ると、うまくいくようです。子供は親から派生すべきか? GetRect()はParentの仮想関数ですか?もしそうなら、その実装は何ですか?childPtrはChild *またはParent *ですか?もっと文脈が必要だと思う。 – Ferruccio

+0

child1、child2、およびyesがParentから派生する必要があります。 GetRect()はParentの純粋仮想です。 childPtrはParent *の型です。 CGRectは私の知る限りでは構造体になっています。 – eugene

+0

私はstatic_cast ing ptrをChild *に呼び出す前に呼び出しました。 – eugene

答えて

0

uがこの

int型indexX = rect.origin.x

int型indexY = rect.origin.y

などを行います..

関連する問題