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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
レイ

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

#1

投稿記事 by レイ » 14年前

円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.~って書くとエラーが出てしまいます。

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

box

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

#2

投稿記事 by box » 14年前

> *data.~って書くとエラーが出てしまいます。

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

レイ

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

#3

投稿記事 by レイ » 14年前

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:クラスでのポインタの使い方

#4

投稿記事 by めるぽん » 14年前

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:クラスでのポインタの使い方

#5

投稿記事 by レイ » 14年前

ぬるぽんさん
ありがとうございます!!
出来ました。
そうだったのですが・・・イマイチ、クラスでのポインタについて理解してなかったので助かりました。

閉鎖

“C言語何でも質問掲示板” へ戻る