ページ 11

クラスでのポインタの使い方

Posted: 2010年10月24日(日) 07:39
by レイ
円Aは常に画面内を動いてます。
円Bは円Aが当たったら動きだします
それまではとまっております。
こういったプログラムを作ろうとしているのですが
クラスでのポインタの使い方が解らないため上手く処理ができません。
引数のdataの値を変更したいです。

void MEDAL::HitMedal( MEDAL data )で
円Aと円Bとが当たったら円Aの移動方向が反転し
円Bに移動速度を渡すといったことをしております。

クラスを使わなければ
void plus( int *val ){
*val = 3 + 4;
}

plus( &res );

みたいに出来るかと思うのですが
void MEDAL::HitMedal( MEDAL *data )みたいに書いて
*data.~って書くとエラーが出てしまいます。

わかりにくい説明ですみません。

Re:クラスでのポインタの使い方

Posted: 2010年10月24日(日) 09:11
by box
> *data.~って書くとエラーが出てしまいます。

何をしたとき(コンパイル時? 実行時?)に
どんなエラー(エラーメッセージは?)が出るかを
書かないことには、話になりません。

Re:クラスでのポインタの使い方

Posted: 2010年10月25日(月) 02:01
by レイ
boxさん回答ありがとうございます。
具体的には下記の様に修正するとエラーが出ます。
引数の値を変更したいのでポインタを使ってるのですが何故かエラーが出てしまいます。
void MEDAL::HitMedal( MEDAL *data ){
    if( HitCircleCircle( this->item.x, this->item.y, *data.item.x, *data.item.y, 40 ) ){
        ~~
    }
}
Medal.HitMedal( &Fever[0] );
の様に変えると下記のエラーが出ます。
error: request for member 'item' in 'data', which is of non-class type 'MEDAL*'

Re:クラスでのポインタの使い方

Posted: 2010年10月25日(月) 17:24
by めるぽん
C++ を使っているようなので、単純に
void MEDAL::HitMedal( MEDAL& data )
に変更すればよさそうな気がします。

どうしてもポインタでやりたい場合は、
> if( HitCircleCircle( this->item.x, this->item.y, *data.item.x, *data.item.y, 40 ) ){
の *data.item.x や *data.item.y 部分を (*data).item.x, (*data).item.y にするか、data->item.x, data->item.y に変更すればよさそうです。

*data.item.x は *(data.item.x) を意味するので、コンパイルエラーになります。

Re:クラスでのポインタの使い方

Posted: 2010年10月26日(火) 12:16
by レイ
ぬるぽんさん
ありがとうございます!!
出来ました。
そうだったのですが・・・イマイチ、クラスでのポインタについて理解してなかったので助かりました。