構造体内で宣言した配列メンバの扱い方

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

構造体内で宣言した配列メンバの扱い方

#1

投稿記事 by イマダニ » 12年前

ヘッダファイルに書かれた構造体の中にこんな配列のメンバがあります。

コード:

typedef struct{
play img[10];
}play;
これをこんな形で別のファイルで使うと

コード:

//画像を読み込む
LoadDivGraph("play.png",2,2,1,64,64,play.img);

if(なになにが押された時)
play->img[12]を描画
画像が読み込めません
構造体内に配列のメンバを入れるのは初めてなのでなぜなのかわかりません。
なにか使用するための決まりとかあるんでしょうか?

box
記事: 2002
登録日時: 14年前

Re: 構造体内で宣言した配列メンバの扱い方

#2

投稿記事 by box » 12年前

インデントくらい、ちゃんと付けていただきたいところであります。
さて、
イマダニ さんが書きました: 画像が読み込めません
どういう状況をもってして、「画像が読み込めない」と判断されているのでしょうか。
何かエラーメッセージが出ているのであれば、
「何をしたときに」「どんな」エラーメッセージが出ているかを「具体的に」書いていただけると
大いに助かります。なにせ、質問者さんのパソコンの状態はご本人にしかわからないものでして。
イマダニ さんが書きました:

コード:

typedef struct{
play img[10];
}play;
これは、play型のメンバーimg[10]を持つ構造体にplayという別名を付けた状態です。
その別名が付いた変数playをどこかで定義されていますか?
イマダニ さんが書きました:

コード:

//画像を読み込む
LoadDivGraph("play.png",2,2,1,64,64,play.img);

if(なになにが押された時)
play->img[12]を描画
変数playは、構造体の実体ですか?それとも構造体を指すポインターですか?
両者がゴッチャになっていないでしょうか。
play.imgというのは、メンバーimgの先頭アドレスを指しています。実体をロードしなくて大丈夫ですか?
また、img[12]というのは配列の定義範囲外になっています。大丈夫ですか?
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

イマダニ

Re: 構造体内で宣言した配列メンバの扱い方

#3

投稿記事 by イマダニ » 12年前

すいません!あわてて質問して質問内容が適当になってしまいました。
今後気をつけます……
現在、ゲームをチーム制作しており、まだ初心者である友人がプレイヤーキャラを動かそうとしています。
その友人が初めて分割コンパイルを行っており

コード:

player.h

typedef struct {
	int Px,Py;
	int PCG[16];
} PLAYER;

コード:

player.cpp

void player_draw(PLAYER *play){
	DrawRotaGraph( play->Px, play->Py, 2.0, 0.0, play->PCG[12], TRUE );
}
このような形でプレイヤー画像を描画させようとしています。
結果、エラーも無く動作はするのですが、画面にプレイヤー画像が映りません。
それで僕に質問してきたのですが、僕にもわかりません!
ご教授願います。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: 構造体内で宣言した配列メンバの扱い方

#4

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

見せられた部分でだけ言えば動くのでは?としか言えません。
まず、PCG[12]にちゃんと画像ハンドルが入っていることをデバッガで確認してください。
それとplayのポインタ値が正しいこともデバッガで確認してください。
それと、play->PCG[12]が正しいハンドル値あることも確認する必要があります。

【追記】
play->Px, play->Py
が正しい座標を指していることも確認が必要です。

全部デバッガで確認してくださいね。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

nil
記事: 428
登録日時: 13年前

Re: 構造体内で宣言した配列メンバの扱い方

#5

投稿記事 by nil » 12年前

教授->教示の間違いでは?

DrawRotaGraphにブレークポイントを置き、F5でデバッグ実行ブレークポイントで止まった時にplay->PCG[12]の中身が-1なら画像は読み込めていません。

イマダニ

Re: 構造体内で宣言した配列メンバの扱い方

#6

投稿記事 by イマダニ » 12年前

デバッガして、いろいろ試行錯誤したところ全く別の場所でミスがありました。
いろいろお騒がせしてすみません……
でもデバッガやブレークポイントはあまり活用したことがなかったので
今回の皆さんのアドバイスで大変勉強になりました。
アドバイスありがとうございました!

閉鎖

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