ページ 11

?演算子

Posted: 2008年5月05日(月) 20:59
by J
a = (field[y[0]][/url] > field[y[1]][/url]) ? field[(y[0]+1)][/url] : field[(y[1]+1)][/url];
とやると、
エラー E2188 c:\field\Field.h 291: 式の構文エラー(関数 PieceDrop(int ( *)[8]) )
と表示されてしまいます。何が悪いのでしょうか?

Re:?演算子

Posted: 2008年5月05日(月) 21:48
by
Field.h の 291 行目の前後 10 行ほどを見せてください。

また、[/url] の中には適切な式を書く必要があるはずです。

Re:?演算子

Posted: 2008年5月06日(火) 11:13
by J
int PieceDrop(int (*field)[8])
{
//変数宣言、キーチェックの準備
char key[256];
int x[2]={3,3,},y[2]={0,1,},i=0,a;
GetHitKeyStateAll(key);
//ピースをセット
field[0][3] = Piece[0];
field[1][3] = Piece[1];
//移動のループ
while( i==0 )
{
if( key[KEY_INPUT_LSHIFT] == 1 && key[KEY_INPUT_RIGHT] == 1)
{
//右回転動作
}
if( key[KEY_INPUT_LSHIFT] == 1 && key[KEY_INPUT_LEFT] == 1)
{
//左回転動作
}
if( key[KEY_INPUT_DOWN] == 1 )
{
//高速落下
}
if( key[KEY_INPUT_RIGHT] == 1 )
{
//右移動
}
if( key[KEY_INPUT_LEFT] == 1 )
{
//左移動
}
a = (field[y[0]][/url] > field[y[1]][/url]) ? field[(y[0]+1)][/url] : field[(y[1]+1)][/url];
if(a != 0)
{
//下に何も無いかチェック
}
}
return 0;
}

Re:?演算子

Posted: 2008年5月06日(火) 14:25
by すく
二次元配列の

後ろの[/url]はなにもはいらないの?

Re:?演算子

Posted: 2008年5月06日(火) 15:12
by
何か入ってないとまずいでしょうね。

それから、ヘッダーファイルに関数の実体を書いているのも
まずいでしょうね。

Re:?演算子

Posted: 2008年5月06日(火) 20:13
by J
そうですか、よくわかりました。試してみます。
二次元配列の[y][x]では片方は省略しても良いと聞いていましたが・・・

>それから、ヘッダーファイルに関数の実体を書いているのも
>まずいでしょうね。

詳しく教えて下さい。

Re:?演算子

Posted: 2008年5月06日(火) 20:34
by
省略できるのは宣言の時だけでは?

Re:?演算子

Posted: 2008年5月06日(火) 20:54
by
> 片方は省略しても良い

省略できる局面と、記述を省略できる場所について確認してください。
今のコードは、上記2点とも間違えています。

> 詳しく教えて下さい。

当該ヘッダーファイルを複数の *.c から
インクルードすることを想定してみてください。
同じ関数の定義が複数存在してしまいます。
逃れる方法はあるのですが、
それを差し置いてもヘッダーファイルに関数の実体は書かないのが通常のやり方です。
お使いのコンパイラのヘッダーファイルの中身をのぞいてみるとよいでしょう。

Re:?演算子

Posted: 2008年5月07日(水) 05:32
by J
エラーは解決できました。
回答をくださった方、本当にありがとうございました。