ページ 11

龍神録 8章のエラー

Posted: 2011年2月19日(土) 21:49
by tune
久しぶりです。tuneです。

今、BCCデベロッパーで龍神録をまねているのですが、if文の構文エラーで先に進めません。
こちらがコードです。
ファイル名 key.cpp

コード:

#include"GV.h"

unsigned int stateKey[256];

//どのキーがどれくらい押されたか監視する関数
int GetHitKeyStateAll_2()
{
    char GetHitKeyStateAll_Key[256];
    
    GetHitKeyStateAll( GetHitKeyStateAll_Key );
    for(int i=0;i<256;i++)
    {
        if(GetHitKeyStateAll_Key[i]==1) stateKey[i]++;
        else                            stateKey[i]=0;
    }
    return 0;
}

//キーの入力状態を返す関数
int CheckStateKey(unsigned char Handle)
{
        return stateKey[Handle];
}

//パッドの入力状態を格納する変数
pad_t pad;

//引数1と引数2のうち大きいほうを引数1に代入する。
void input_pad_or_key(int *p,int k)
{
  if(*p > k)
  {
    *p = *p;
  }
  else
  {
    *p = k;
  }
}

//パッドとキーボードの両方の入力をチェックする関数
void GetHitPadStateAll()
{
        int i,PadInput,mul=1;
        
        PadInput = GetJoypadInputState( DX_INPUT_PAD1 );//パッドの入力状態を取得
        for(i=0;i<16;i++)
        {
                if(PadInput & mul)  pad.key[i]++;  //入力があったパッドのボタンに対応する変数の値をカウントする
                else                pad.key[i]=0;
                mul*=2; //調べるビットを次のビットにシフトする。
        }
        input_pad_or_key(&pad.key[configpad.left]   ,CheckStateKey(KEY_INPUT_LEFT    ));
        input_pad_or_key(&pad.key[configpad.up]     ,CheckStateKey(KEY_INPUT_UP      ));
        input_pad_or_key(&pad.key[configpad.right]  ,CheckStateKey(KEY_INPUT_RIGHT   ));
        input_pad_or_key(&pad.key[configpad.down]   ,CheckStateKey(KEY_INPUT_DOWN    ));
        input_pad_or_key(&pad.key[configpad.shot]   ,CheckStateKey(KEY_INPUT_Z       ));
        input_pad_or_key(&pad.key[configpad.bom]    ,CheckStateKey(KEY_INPUT_X       ));
        input_pad_or_key(&pad.key[configpad.slow]   ,CheckStateKey(KEY_INPUT_LSHIFT  ));
        input_pad_or_key(&pad.key[configpad.start]  ,CheckStateKey(KEY_INPUT_ESCAPE  ));
        input_pad_or_key(&pad.key[configpad.change] ,CheckStateKey(KEY_INPUT_LCONTROL));
}

//渡されたパッドキー番号の入力状態を返す。返り値が-1なら不正
int CheckStatePad(unsigned int Handle)
{
        if( 0<=Handle && Handle<PAD_MAX )
        {
                return pad.key[Handle];
        }
        else
        {
                printfDx("CheckStatePadに渡した値が不正です\n");
                return -1;
        }
}
BCCでコンパイルすると
エラー E2188 C:\Users\tomohiro\c言語\bccdev1221\danmaku\Key.cpp 67: 式の構文エラー(関数 CheckStatePad(unsigned int) )
エラー E2377 C:\Users\tomohiro\c言語\bccdev1221\danmaku\Key.cpp 76: If文に ) がない(関数 CheckStatePad(unsigned int) )

と出てしまいます。

しかし、VisualC++でコンパイルするとなぜかコンパイルできてしまいます。

自分では原因がわかりませんでした。

これは開発環境の違いがエラーの原因なのでしょうか?
これからはVC++で開発しないといけないのでしょうか?

Re: 龍神録 8章のエラー

Posted: 2011年2月19日(土) 23:56
by softya(ソフト屋)
少なくとダウンロードした龍神録の8章のプロジェクトをbccでコンパイルすると正常に終了します。
そして、tuneさんの貼ったkey.cppに差し替えてもコンパイル結果は正常です。
別の問題ではないでしょうか?

Re: 龍神録 8章のエラー

Posted: 2011年2月20日(日) 00:27
by bitter_fox
tune さんが書きました:

コード:

        if( 0<=Handle && Handle<PAD_MAX )
        {
                return pad.key[Handle];
        }
エラー E2188 C:\Users\tomohiro\c言語\bccdev1221\danmaku\Key.cpp 67: 式の構文エラー(関数 CheckStatePad(unsigned int) )
エラー E2377 C:\Users\tomohiro\c言語\bccdev1221\danmaku\Key.cpp 76: If文に ) がない(関数 CheckStatePad(unsigned int) )
ここのPAD_MAXを定義している部分を載せていていただけますでしょうか?(define.h全体でも結構です。)

Re: 龍神録 8章のエラー

Posted: 2011年2月20日(日) 10:51
by 初級者
define.h というのは、何を指しているのでしょうか?

Re: 龍神録 8章のエラー

Posted: 2011年2月20日(日) 12:44
by bitter_fox
初級者 さんが書きました:define.h というのは、何を指しているのでしょうか?
define.hというのは龍神録の館の「定義を書くためのヘッダファイル」ですね。
http://dixq.net/rp/1.html
[hr][追記]
龍神録の館ではdefine.h内でPAD_MAXを定義しています。
http://dixq.net/rp/8.html

Re: 龍神録 8章のエラー

Posted: 2011年2月20日(日) 18:16
by tune
原因がわかりました。
define.hで

コード:

#define.h PAD_MAX
とだけ書いてあり、

実際にPAD_MAXが何を定義したものなのか書いてありませんでした・・・。

コード:

#define.h PAD_MAX 16
と書き直したことろ、見事コンパイルができました。

define.hが間違っていなんて、指摘がなければわかりませんでした。

ありがとうございます。