ページ 1 / 1
3種類のエラーについて質問です
Posted: 2012年3月22日(木) 15:32
by ふらっと
昨日も質問しましたふらっとです。
お世話になっております。
昨日の質問に対して頂いた回答からじゃんけんゲームを練習で作ってみることにしました。
新・ゲームプログラミングの館を参考にさせていただいて、作っているんですが
うまくいかないところがあるので質問します。
まず、キー入力です。
キー入力をメインの関数とは別のkey.ccp関数で行うようにしようと思い
新・ゲームプログラミングの館に載っていたものをkey.ccpにコピーして配列変数keyをm_keyに変えてみました。
しかし、実行しようとすると
error C3861: 'gpUpdateKey': 識別子が見つかりませんでした
fatal error C1903: 直前のエラーを修復できません。コンパイルを中止します。
と出ます。
このプロジェクトは新・ゲームプログラミングの館で勉強した時のものなので、gpUpdateKey関数自体はプロジェクトに入っているはずです。
ソースファイルから別のソースファイルの関数は呼び出せないということでしょうか?
2つ目です。
draw.ccpで画像をロードするために
static int m_Handle01, m_Handle02, m_Handle03;
m_Handle01 = LoadGraph("画像/ぐー.png");
m_Handle02 = LoadGraph("画像/ちょき.png");
m_Handle03 = LoadGraph("画像/ぱー.png");
と書いたんですが
これもまた実行しようとすると
型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
'int m_Handle01' : 再定義されました。
'm_Handle01' の宣言を確認してください。
と出ます(実際はm_Handle02もm_Handle03も)
3つ目は
関数の最後の行に
値を返さないコントロール パスがあります。
というエラーが出ます。
原因、解決方法を教えてください。
よろしくお願いします。
Re: 3種類のエラーについて質問です
Posted: 2012年3月22日(木) 16:10
by h2so5
ふらっと さんが書きました:
まず、キー入力です。
キー入力をメインの関数とは別のkey.ccp関数で行うようにしようと思い
新・ゲームプログラミングの館に載っていたものをkey.ccpにコピーして配列変数keyをm_keyに変えてみました。
しかし、実行しようとすると
error C3861: 'gpUpdateKey': 識別子が見つかりませんでした
fatal error C1903: 直前のエラーを修復できません。コンパイルを中止します。
と出ます。
このプロジェクトは新・ゲームプログラミングの館で勉強した時のものなので、gpUpdateKey関数自体はプロジェクトに入っているはずです。
ソースファイルから別のソースファイルの関数は呼び出せないということでしょうか?
key.ccp関数とはなんでしょうか。関数名にドットは使えませんが。
gpUpdateKey関数の宣言をしたヘッダファイルをソースでインクルードしないとそういうエラーが出るはずです。
ふらっと さんが書きました:
2つ目です。
draw.ccpで画像をロードするために
static int m_Handle01, m_Handle02, m_Handle03;
m_Handle01 = LoadGraph("画像/ぐー.png");
m_Handle02 = LoadGraph("画像/ちょき.png");
m_Handle03 = LoadGraph("画像/ぱー.png");
と書いたんですが
これもまた実行しようとすると
型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
'int m_Handle01' : 再定義されました。
'm_Handle01' の宣言を確認してください。
と出ます(実際はm_Handle02もm_Handle03も)
これはもうちょっと広い範囲のソースがないと原因がわからないです。
ふらっと さんが書きました:
3つ目は
関数の最後の行に
値を返さないコントロール パスがあります。
というエラーが出ます。
戻り値が必要な関数内で戻り値を返さない場合あるといいうことです。例えば、
コード:
int foo(int bar)
{
if (bar > 0) {
return 0;
} else {
}
// bar <= 0 の場合戻り値がない
}
Re: 3種類のエラーについて質問です
Posted: 2012年3月22日(木) 16:34
by softya(ソフト屋)
大体の回答はh2so5さんの書かれたとおりです。
ファイル名・クラス名・構造体名・関数名・メンバ名など明確に説明を書き分けて下さい。結構重要な問題です。
あとLoadGraphを書く場所は結構重要です。所属するファイル・関数と呼び出されるタイミングも書いてくださいね。
そうそれと、前回の質問が一時的解決なら解決チェックをお願いしますね。
あとm_はクラスのメンバ変数だと明示するためのルールの一種ですので無闇に付けると意味無いですよ。
Re: 3種類のエラーについて質問です
Posted: 2012年3月22日(木) 16:58
by ふらっと
申し訳ないんですが
解決にチェックとはどこから行えるか教えてもらえますか?
それとコードもフォーラムルールに載っているようにしていなくて申し訳ないです
以後気をつけます
Re: 3種類のエラーについて質問です
Posted: 2012年3月22日(木) 17:05
by softya(ソフト屋)
ふらっと さんが書きました:申し訳ないんですが
解決にチェックとはどこから行えるか教えてもらえますか?
解決チェックは返信の投稿時に行えます。
送信ボタンの横にあるチェックボックスです。
Re: 3種類のエラーについて質問です
Posted: 2012年3月22日(木) 17:39
by ふらっと
「key.ccp関数」は
「key.ccpというソースコード」の間違いでした。
新・ゲームプログラミングの館で紹介されている
gpUpdateKey()関数(最初の質問に書いた、キー入力の関数です)を使うには何をインクルードすればいいんですか?
#include "gpUpdateKey.h"では
include ファイルを開けません。'gpUpdateKey.h': No such file or directory
となってダメでした。
最後に
もっと広い範囲を載せないとわからないとアドバイスをもらったので
draw.ccpを全てコピーして載せておきます。(座標は実際見て調整しよう思っているので、だいたいです)
よろしくお願いします。
コード:
#include "DxLib.h"
#include "draw.h"
static int Handle01, Handle02, Handle03; //画像格納用ハンドル
static int White = GetColor( 255, 255, 255 );
Handle01 = LoadGraph("画像/ぐー.png");
Handle02 = LoadGraph("画像/ちょき.png");
Handle03 = LoadGraph("画像/ぱー.png");
void Draw_Player_gu(){
DrawGraph( 20, 160, Handle01, TRUE ); // プレイヤーのぐー描画
}
void Draw_Player_tyoki(){
DrawGraph( 20, 160, Handle02, TRUE ); //プレイヤーのちょき描画
}
void Draw_Player_pa(){
DrawGraph( 20, 160, Handle03, TRUE ); //プレイヤーのぱー描画
}
void Draw_CPU_gu(){
DrawGraph( 300, 160, Handle01, TRUE ); // CPUのぐー描画
}
void Draw_CPU_tyoki(){
DrawGraph( 300, 160, Handle02, TRUE ); //CPUのちょき描画
}
void Draw_CPU_pa(){
DrawGraph( 300, 160, Handle03, TRUE ); //CPUのぱー描画
}
void Draw_Draw(){
DrawFormatString( 120, 240, White, "あいこ");
}
void Draw_Win(){
DrawFormatString( 120, 240, White, "勝利");
}
void Draw_Defeat(){
DrawFormatString( 120, 240, White, "敗北");
}
Re: 3種類のエラーについて質問です
Posted: 2012年3月22日(木) 17:50
by softya(ソフト屋)
さっき見逃してましたがファイル拡張子はccpではなくcppです。c plus plusの略ですね。
ふらっと さんが書きました:新・ゲームプログラミングの館で紹介されている
gpUpdateKey()関数(最初の質問に書いた、キー入力の関数です)を使うには何をインクルードすればいいんですか?
#include "gpUpdateKey.h"では
include ファイルを開けません。'gpUpdateKey.h': No such file or directory
となってダメでした。
gpUpdateKey.hは自分で作ります。
書き方は、新・C言語 ~ゲームプログラミングの館に説明があります。
「d.2章 複数のファイルに分けてコンパイルする」
http://dixq.net/g/d_02.html
それとDxLib_init()前に呼び出してはいけない関数が変数定義で使われています。
static int White = GetColor( 255, 255, 255 );
これはDXライブラリの仕様上、推奨されません。いや、動かないかエラーになると思ってもらったほうが良いでしょうね。
変数定義はの処理はmain動作前に行われますので、ここに書いてはいけません。
初期化関数を作り、そこに書きましょう。
コード:
Handle01 = LoadGraph("画像/ぐー.png");
Handle02 = LoadGraph("画像/ちょき.png");
Handle03 = LoadGraph("画像/ぱー.png");
こちらは、スクリプト言語のPHPやPerlではないので関数外に代入文は書けません。
必ず関数で行なって下さい。変数の初期値にするのは上に書いた理由でNGです。
[補足]
Handle01 = LoadGraph("画像/ぐー.png");
や関数でインデント(字下げ)してますが、一般的な書き方としてC/C++ではここでインデントしません。
慣習と言って良いと思いますが他の人にも読みやすくなるので独自流は避けられたほうが良いでしょう。
Re: 3種類のエラーについて質問です
Posted: 2012年3月23日(金) 13:08
by ふらっと
ありがとうございます
このエラー自体は解決(?)したので解決にしておきます