LNK:2019 LNK:1120

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

LNK:2019 LNK:1120

#1

投稿記事 by juju » 5年前

コード:



int GetChipParam(float x,float y){
	int cx,cy;

	cx=(int)x/CHIP_SIZE;
	cy=(int)y/CHIP_SIZE;

	if(x>=MAP_WIDTH || y>=MAP_HEIGHT || x<0 || y<0){
		return 0;
	}
	return hantei[cx][cy];
}

// キャラクタをマップとの当たり判定を考慮しながら移動する
int CharMove( float *cx, float *cy, float *DownSP,
                    float Movex, float Movey, float size, char *p_flag )
{
    float Dummy = 0.0F ;
    float hsize ;

    // キャラクタの左上、右上、左下、右下部分が当たり判定のある
    // マップに衝突しているか調べ、衝突していたら補正する

    // 半分のサイズを算出
    hsize = size * 0.5F ;

    // 先ず上下移動成分だけでチェック
    {
        // 左下のチェック、もしブロックの上辺に着いていたら落下を止める
        if( hanteiHitCheck( *cx - hsize, *cy + hsize, &Dummy, &Movey ) == 3 ) *DownSP = 0.0F ;

        // 右下のチェック、もしブロックの上辺に着いていたら落下を止める
        if( hanteiHitCheck( *cx + hsize, *cy + hsize, &Dummy, &Movey ) == 3 ) *DownSP = 0.0F ;

        // 左上のチェック、もしブロックの下辺に当たっていたら落下させる
        if( hanteiHitCheck( *cx+ - hsize,*cy-hsize, &Dummy, &Movey ) == 4 ) *DownSP *= -1.0F ;

        // 右上のチェック、もしブロックの下辺に当たっていたら落下させる
        if( hanteiHitCheck( *cx + hsize, *cy - hsize, &Dummy, &Movey ) == 4 ) *DownSP *= -1.0F ;

        // 上下移動成分を加算
        *cy += Movey ;
    }

    // 後に左右移動成分だけでチェック
    {
        // 左下のチェック
        hanteiHitCheck( *cx - hsize, *cy + hsize, &Movex, &Dummy ) ;

        // 右下のチェック
        hanteiHitCheck( *cx + hsize, *cy + hsize, &Movex, &Dummy ) ;

        // 左上のチェック
        hanteiHitCheck( *cx - hsize, *cy - hsize, &Movex, &Dummy ) ;

        // 右上のチェック
        hanteiHitCheck( *cx + hsize, *cy - hsize, &Movex, &Dummy ) ;

        // 左右移動成分を加算
        *cx += Movex ;
    }

    // 接地判定
    {
        // キャラクタの左下と右下の下に地面があるか調べる
        if( GetChipParam( *cx - size * 0.5F, *cy + size * 0.5F + 1.0F ) == 0 && 
            GetChipParam( *cx + size * 0.5F, *cy + size * 0.5F + 1.0F ) == 0 )
        {
            // 足場が無かったらジャンプ中にする
            *p_flag = TRUE ;
        }
        else
        {
            // 足場が在ったら接地中にする
            *p_flag = FALSE ;
        }
    }

    // 終了
    return 0 ;
}


int MapHitCheck( float cx, float cy,
                    float *Movex, float *Movey )
{
    float afX, afY ;

    // 移動量を足す
    afX = cx + *Movex ;
    afY = cy + *Movey ;

    // 当たり判定のあるブロックに当たっているかチェック
    if( GetChipParam( afX, afY ) == 1 )
    {
        float blx, bty, brx, bby ;

        // 当たっていたら壁から離す処理を行う

        // ブロックの上下左右の座標を算出
        blx = (float)( (int)afX / CHIP_SIZE ) * CHIP_SIZE ;        // 左辺の X 座標
        brx = (float)( (int)afX / CHIP_SIZE + 1 ) * CHIP_SIZE ;    // 右辺の X 座標

        bty = (float)( (int)afY / CHIP_SIZE ) * CHIP_SIZE ;        // 上辺の Y 座標
        bby = (float)( (int)afY / CHIP_SIZE + 1 ) * CHIP_SIZE ;    // 下辺の Y 座標

        // 上辺に当たっていた場合
        if( *Movey > 0.0F )
        {
            // 移動量を補正する
            *Movey = bty - cy - 1.0F  ;

            // 上辺に当たったと返す
            return 3 ;
        }

        // 下辺に当たっていた場合
        if( *Movey < 0.0F )
        {
            // 移動量を補正する
            *Movey = bby - cy + 1.0F ;

            // 下辺に当たったと返す
            return 4 ;
        }

        // 左辺に当たっていた場合
        if( *Movex > 0.0F )
        {
            // 移動量を補正する
            *Movex = blx - cx - 1.0F ;

            // 左辺に当たったと返す
            return 1 ;
        }

        // 右辺に当たっていた場合
        if( *Movex < 0.0F )
        {
            // 移動量を補正する
            *Movex = brx - cx + 1.0F ;

            // 右辺に当たったと返す
            return 2 ;
        }

        // ここに来たら適当な値を返す
        return 4 ;
    }

    // どこにも当たらなかったと返す
    return 0 ;
}



プログラムの一部ですが、これを実行すると、以下のようなエラーが表示されました。
これはどのような意味なのでしょうか?


error LNK2019: 未解決の外部シンボル "int __cdecl hanteiHitCheck(float,float,float *,float *)" (?hanteiHitCheck@@YAHMMPAM0@Z) が関数 "int __cdecl CharMove(float *,float *,float *,float,float,float,char *)" (?CharMove@@YAHPAM00MMMPAD@Z) で参照されました。
1>C:\Users\test\Downloads\GameProg\GameProg\Debug\GameProg.exe : fatal error LNK1120: 外部参照 1 が未解決です。

アバター
みけCAT
記事: 6247
登録日時: 9年前
住所: 千葉県
連絡を取る:

Re: LNK:2019 LNK:1120

#2

投稿記事 by みけCAT » 5年前

関数hanteiHitCheckの実体(のプログラム)がリンクしたライブラリ/オブジェクトファイルの中に見つからなかったという意味です。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

box
記事: 1746
登録日時: 9年前

Re: LNK:2019 LNK:1120

#3

投稿記事 by box » 5年前

juju さんが書きました: プログラムの一部ですが、これを実行すると、以下のようなエラーが表示されました。
ビルドすると
あるいは
コンパイル・リンクすると
というのが正しく、
実行すると
というのは正しくありません。

実行ファイルが正しく生成できていないので、
実行するには至っていないのであります。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

アバター
へにっくす
記事: 628
登録日時: 7年前
住所: 東京都

Re: LNK:2019 LNK:1120

#4

投稿記事 by へにっくす » 5年前

思うに、
hanteiHitCheck

MapHitCheck
に置き換えるだけでいい気がします。
オフトピック
プログラムは、思った通りには動かない。
書いた通りに動く。

・・・もっともリンクエラー起こしているので
動かせてもいないわけですが (^^;
written by へにっくす

アバター
みけCAT
記事: 6247
登録日時: 9年前
住所: 千葉県
連絡を取る:

Re: LNK:2019 LNK:1120

#5

投稿記事 by みけCAT » 5年前

box さんが書きました:
juju さんが書きました: プログラムの一部ですが、これを実行すると、以下のようなエラーが表示されました。
ビルドすると
あるいは
コンパイル・リンクすると
というのが正しく、
実行すると
というのは正しくありません。

実行ファイルが正しく生成できていないので、
実行するには至っていないのであります。
「実行しようとすると」かもしれません。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

閉鎖

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