パラメーターと互換性がありません

アバター
BEAT
記事: 4
登録日時: 14年前
住所: 兵庫県S市杜王町
連絡を取る:

パラメーターと互換性がありません

投稿記事 by BEAT » 14年前

こんなソースで関数で構造体のアドレス渡しをしようとしているのですが

CODE:

/*player.h*/
//プロトタイプ宣言
void player_init(struct pl *player);			//プレイヤー初期化関数

CODE:

/*player.cpp*/
//関数本体
void player_init(struct pl *player){

	//画像初期化
	LoadDivGraph("image/player.png",16,4,4,32,32,player_walk);			
	LoadDivGraph("image/player_attack.png",16,4,4,64,64,player_attack);

	//当たり判定初期化
	player.hantei_x1=player.x+6;					
	player.hantei_y1=player.y;

    //下向きに設定
	player.muki_hosei=MUKI_DOWN;
}

CODE:

/*main.cpp*/
//プレイヤー構造体
struct pl{
	int x,y;								//座標
	int joutai;								//状態
	int hantei_x1,hantei_x2;				//当たり判定
	int hantei_y1,hantei_y2;
	int hantei_attack_x1,hantei_attack_x2;	//攻撃の当たり判定
	int hantei_attack_y1,hantei_attack_y2;	//攻撃の当たり判
	int hitback_flag;						//のけぞりフラグ
	int	hitback_time;						//のけぞり時間(hantei playrer)
	int hitback_x,hitback_y;				//のけぞり方向
	int muteki_t;							//無敵時間
	int	life;								//体力
	int walk_flag;							//移動フラグ
	int attack_flag;						//攻撃フラグ
	int attack_time;						//攻撃経過時間
	int muki_hosei;							//向き補正
	int anime_time;							//アニメーション時間

	int graph_size_x;						//画像サイズ
	int graph_size_y;

};


struct pl player;

//中略


	//関数の呼び出し
	player_init(&player );	//プレイヤー関係初期化(構造体 pl)
なぜか
「型pl*の引数は型pl*の引数とパラメーターの互換性がありません」
というエラーが出てしまいます。

何度も調べてみたんですが上手くいきません、どこが間違ってるんでしょうか?

ISLe
記事: 2650
登録日時: 14年前

Re: パラメーターと互換性がありません

投稿記事 by ISLe » 14年前

引数のplayerはポインタだから
player->hantei_x1
あるいは
(*player).hantei_x1
というふうにしなければならないのでは?

(追記)
struct plの本体定義がmain.cppにしか無い?のかな。
最後に編集したユーザー ISLe on 2011年7月02日(土) 16:30 [ 編集 1 回目 ]

アバター
BEAT
記事: 4
登録日時: 14年前
住所: 兵庫県S市杜王町
連絡を取る:

Re: パラメーターと互換性がありません

投稿記事 by BEAT » 14年前

>(*player).hantei_x1というふうにしなければならないのでは?

そこはエラー出てたんですけどわかってたんでそのまま貼っちゃいました。
紛らわしかったですね、すいません。

あ、なるほど受け取る構造体の中身が何なのかわからないってことですね。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前

Re: パラメーターと互換性がありません

投稿記事 by softya(ソフト屋) » 14年前

struct pl{の宣言をplayer.hに移動して、mainで#include "player.h"としないとマズイですね。

アバター
MoNoQLoREATOR
記事: 284
登録日時: 14年前

Re: パラメーターと互換性がありません

投稿記事 by MoNoQLoREATOR » 14年前

void player_init(struct pl &player);

というようにすれば、
player.hantei_x1

player->hantei_x1
にする必要がなくて便利ですよ。
最後に編集したユーザー MoNoQLoREATOR on 2011年7月02日(土) 19:46 [ 編集 1 回目 ]

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前

Re: パラメーターと互換性がありません

投稿記事 by softya(ソフト屋) » 14年前

void player_init(struct pl &player);
それはC++の文法の参照ですね。
まぁ、C++だと理解して使う分には問題ないですけど。

アバター
BEAT
記事: 4
登録日時: 14年前
住所: 兵庫県S市杜王町
連絡を取る:

Re: パラメーターと互換性がありません

投稿記事 by BEAT » 14年前

softyさんへ
了解です。

書き方はアロー演算子使っていこうかなって思います
C++なのにわざわざなんでCの書き方するの?とおもわれるかもしれませんが

学校の課題でゲーム作るときに間違えないように癖をつけとこうと思って。

C++じゃ別の使い方でアロー演算子使うからややこしくなっちゃうけど仕方ない

アバター
MoNoQLoREATOR
記事: 284
登録日時: 14年前

Re: パラメーターと互換性がありません

投稿記事 by MoNoQLoREATOR » 14年前

え?アロー演算子はC++では別の使い方をするんですか?
それは単純に演算子オーバーロードのルールを使うというだけで、少しニュアンスが違うのでは?

アバター
BEAT
記事: 4
登録日時: 14年前
住所: 兵庫県S市杜王町
連絡を取る:

Re: パラメーターと互換性がありません

投稿記事 by BEAT » 14年前

あ、そっか完全に別の話ではないのか