未定義エラーについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
guzoku
記事: 4
登録日時: 5年前

未定義エラーについて

#1

投稿記事 by guzoku » 5年前

本当は自力で頑張ろうと思ったのですが、
どうにも解決できず〆切もかなり迫っているのでこちらにて質問させていただきます。
冬休みの課題でサンプルのシューティングゲームを指定通りに改造するものがありまして、
その指定の中で「2ステージ制にする」が出来そうだったので、やってみたのですが、
どうにも出来ませんでした。

改造前は、
drawGameTitle()でタイトル呼び出し→drawGameMain()でゲーム処理→drawGameClear()でゲームクリア処理 という感じで、

改造後は、
drawGameTitle()でタイトル呼び出し→drawGameMain()でゲーム処理→drawNextStageで次ステージの処理→drawGameMain2()で2ステージ目の処理→drawGameClear()でクリア処理
という感じで行きたいのですが、
drawNextStage()でdrawGameMain2()を呼びだそうとしてもdrawGameMain2()が未定義とエラーが出て先に進めません。
未定義と出たので、ヘッダファイル等を確認したのですが、drawGameMain2()は定義されていました。

main.cppの一部

コード:

void ShootGame::drawGameClear(){
	jikicnt.move();
	bakucnt.move();
	GameFrame::drawGameClear();
	SoundBox::play(4);
	score = 0; //すこあ初期化
}
void ShootGame::drawGameOver(){
	tekicnt.move(jikicnt.getx(), jikicnt.gety());
	bakucnt.move();
	GameFrame::drawGameOver();
}
void ShootGame::drawGameTitle(){
	GameFrame::drawGameTitle();
	SoundBox::playbgm(0);
	
}
void ShootGame::drawNextStage(){
	GameFrame::drawGameMain2(); //←ここでエラーが出てしまいます

}
int WINAPI WinMain(HINSTANCE hI, HINSTANCE hp, LPSTR lpC, int nC){
	ShootGame *sg = new ShootGame();
	sg->doMainLoop(TRUE);
	delete sg;
	sg = NULL;
ヘッダファイル

コード:

#ifndef __GAMEFRAME_H__
#define __GAMEFRAME_H__
#include <DxLib.h>
enum GAMESTATE{
	GAME_TITLE = 1, GAME_MAIN, GAME_OVER, GAME_CLEAR,NEXT_STAGE
};
class GameFrame{
	virtual void loadFiles()throw(int){}
	virtual void initStage(){}
	GAMESTATE gstate;
	int starttime;
	static unsigned int animcounter;
	static float idouryou[20];
	void setIdouHosei();
protected:
	virtual void drawGameTitle();
	virtual void drawGameMain();
	virtual void drawGameMain2();
	virtual void drawGameClear();
	virtual void drawGameOver();
	virtual void drawNextStage();
	GAMESTATE setGameState(GAMESTATE state);
	int largefont, smallfont;
public:
	virtual ~GameFrame(){}
	void doMainLoop(int);
	static unsigned int getAnimCnt();
	static float IdouHosei(int);
	
};
#endif
あと、説明しにくいのですが、
1ステージ目になるdrawGameMain()関数でゲームクリア時2ステージ目へ移行するために
setGameStateをNEXT_STAGEにしているのですが、こちらも未定義エラーと出ます。
同じようにNEXT_STAGEはヘッダファイルに記載しています。
main.cpp drawGameMain()

コード:

void ShootGame::drawGameMain(){
	SoundBox::playbgm(1);
	DrawGraph(0, 0, backjpg, false);
	
	DrawFormatString(0, 0, GetColor(255, 255, 255), "Score:%d", score);
	DrawFormatString(100, 0, GetColor(255, 255, 255), "Stage:1", score);//すこあひょうじ
	jikicnt.move();
	tekicnt.move(jikicnt.getx(), jikicnt.gety());
	bakucnt.move();
	atarihantei();
	if (jikicnt.isGameOver() == true){
		setGameState(GAME_OVER);
		bakucnt.setBaku(1, jikicnt.getx(), jikicnt.gety());

	}
	if (tekicnt.isGameClear() == true){
		setGameState(NEXT_STAGE); //←ここも未定義エラー
		bakucnt.setBaku(2, tekicnt.getx(), tekicnt.gety());

	
	}
何故他の関数は定義されているのに同じように新しく作った関数(ほぼ既存のものをコピペしただけではありますが・・)
が正しく定義されないのかがよくわかりません。
まだまだ未熟な者ですみません。解決法あればよろしくお願いします。
ソースファイルなどこちらに置いておきます。
http://file.immigrants.jp/c++/test_2015_01_05.zip

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

Re: 未定義エラーについて

#2

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

drawGameMain2()やNEXT_STAGEが書かれているgameframe.hがなぜか他のソースコードの1階層上にありました。
testgame.slnがある階層のanimdraw.cpp、animdraw.h、gameframe.cpp、gameframe.hを、
testgame1フォルダの中にコピー(上書き)するとうまくいくかもしれません。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

guzoku
記事: 4
登録日時: 5年前

Re: 未定義エラーについて

#3

投稿記事 by guzoku » 5年前

返信が遅れてしまいすみません。
指摘通り、ファイル階層を見なおしたところ、正常に認識され、コンパイルができるようになりました。
これにて課題も無事完了しました。
ありがとうございました。

アバター
nullptr
記事: 239
登録日時: 8年前

Re: 未定義エラーについて

#4

投稿記事 by nullptr » 5年前

後から見る人のために、解決したら解決マークにチェックを入れて送信するように、ご協力お願いします。
 
 
✜ で C ご ✜
: す + 注 :
¦ か + 文 ¦
?
Is the は :
order C++? ✜
     糸冬   
  ――――――――
  制作・著作 NHK
 
 

閉鎖

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