初歩的な質問ですいません・
構造体を配列にいれて、ポインタを用いて表示したいです。
//構造体の宣言
typedef struct{
int x, y;
int image;
int flag;
}SPointer_t;
//画像ハンドル
static int sbox0h, sbox1h, sbox2h, sbox3h;
//構造体配列の中身
SPointer_t SPointer[4]={
{88, 179, sbox0h, 1},
{233, 177, sbox1h ,0},
{209, 113, sbox2h,0},
{51, 312, sbox3h ,0},
};
//ポインタの宣言
SPointer_t *SPointerP;
//画像のロード
sbox0h = LoadGraph("selectbox0.png");
sbox1h = LoadGraph("selectbox1.png");
sbox2h = LoadGraph("selectbox2.png");
sbox3h = LoadGraph("selectbox3.png");
//描画(とりあえずSPointer[0]だけ)
DrawGraph(0, 0, SPointerP->image, TRUE);
この順番で処理しても画像は表示されませんでした・・・
1日費やしてしまいましたが結局詰まっています。
おそらくSPointerに何も格納されていないようです。
どなたか間違いを探して頂けると助かります。
構造体配列のポインタ
Re: 構造体配列のポインタ
SPointerPがどこを指しているか不定なのに
こんなことをしてはいけません。
コメントにある「(とりあえずSPointer[0]だけ)」というのは幻想に過ぎません。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。
プログラムは思ったとおりには動かない。書いたとおりに動く。
Re: 構造体配列のポインタ
>DrawGraph(0, 0, SPointerP->image, TRUE);
これを、
DrawGraph(0, 0, SPointer[0].image, TRUE);
に変更したらうまく画像は表示されますか?
もしそうなら、
SpointerP=&SPointer[0];
をしておけば、動くかも?
これを、
DrawGraph(0, 0, SPointer[0].image, TRUE);
に変更したらうまく画像は表示されますか?
もしそうなら、
SpointerP=&SPointer[0];
をしておけば、動くかも?
non
-
ざこ
Re: 構造体配列のポインタ
返信ありがとうございます。
すいません、ポインタの値は設定していましたが、入力し忘れてしまいました。
ぼーっとしていて申し訳ないです。
DrawGraph(0, 0, SPointer[0].image, TRUE);
では表示されませんでした。ですが
DrawGraph(0, 0, sbox0h, TRUE);
では表示されました。
僕が思うには、
SPointer_t SPointer[4]={
{88, 179, sbox0h, 1},
{233, 177, sbox1h ,0},
{209, 113, sbox2h,0},
{51, 312, sbox3h ,0},
};
に何らかの問題があるのだと思うのですが、この部分は間違いないのでしょうか?
例えば、SPointer[0].x = 88といった具合に格納されはいるのですか?
すいません、ポインタの値は設定していましたが、入力し忘れてしまいました。
ぼーっとしていて申し訳ないです。
DrawGraph(0, 0, SPointer[0].image, TRUE);
では表示されませんでした。ですが
DrawGraph(0, 0, sbox0h, TRUE);
では表示されました。
僕が思うには、
SPointer_t SPointer[4]={
{88, 179, sbox0h, 1},
{233, 177, sbox1h ,0},
{209, 113, sbox2h,0},
{51, 312, sbox3h ,0},
};
に何らかの問題があるのだと思うのですが、この部分は間違いないのでしょうか?
例えば、SPointer[0].x = 88といった具合に格納されはいるのですか?
- bitter_fox
- 記事: 607
- 登録日時: 15年前
- 住所: 大阪府
Re: 構造体配列のポインタ
仮にこの順番で代入が行われているのであれば問題があります。ざこ さんが書きました: typedef struct{
int image;
}SPointer_t;
//画像ハンドル
static int sbox0h, sbox1h, sbox2h, sbox3h;
//構造体配列の中身
SPointer_t SPointer[4]={
{88, 179, sbox0h, 1},
};
//画像のロード
sbox0h = LoadGraph("selectbox0.png");
SPointerの宣言の際に代入したのはsbox0hが持っている値であり、その後のsbox0hに対する代入によるSPoint.imageの変化は起きません。
こういう時こそポインタを使ってください。
-
ざこ
Re: 構造体配列のポインタ
SPointerP->image = LoadGraph("selectbox0.png");
で表示されました!!!
自分は全然頭が回ってなかったようです・・・
foxさん、nonさん、本当にありがとうございました!これでまた前に進めます!
で表示されました!!!
自分は全然頭が回ってなかったようです・・・
foxさん、nonさん、本当にありがとうございました!これでまた前に進めます!
Re: 構造体配列のポインタ
SPointerPが不定のままのような気がします。
気のせいであれば良いのですが。
気のせいであれば良いのですが。