関数のエラー?

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

関数のエラー?

#1

投稿記事 by JK » 16年前

こんばんは このたびVC++でシューティングゲームのプログラムを組んでいるのですが

img、BG、Playerそれぞれ 識別子は引数依存の照合を使用しても見つかりません。と出ます。Cは基礎は抑えてますがあまり詳しい事は存じてません。
OSはXPです。Microsoft Visual Stdio.NET 2003を使用してます。

以下ソースです。
SHOOTクラス

public SHOOT class{


char Key[256];
int white, BGimg;

typedef struct{
double x,y; //座標
int shot [11][15];
} BODY_player; //double型のx,yのメンバを持つ構造体、別名BODY_player

BODY_player Player;

void img(){
BGimg = LoadGraph("image/back.bmp"); //imgフォルダにあるback.pngを読み出す
layerImg = LoadGraph("image/Player.bmp");
}

void BG(){
DrawGraph(0,0, BGimg, FALSE); //背景 FALSEは透過処理を行わない
}
void color(){
white = GetColor(255,255,255);
}

void Player(){
if(Key[KEY_INPUT_LEFT]==1){ //左キーが押されたらPlayer.xの値を引く
[pre]Player.x-4.0; //X軸-4動かす
[pre]if(Player.x<10.0) //画面の端に行き過ぎないための処理
[pre]Player.x=10.0; //画面の端に行き過ぎてたらXを10にする
[/pre][/pre]
}


if(Key[KEY_INPUT_RIGHT]==1){ //左キーが押されたらPlayer.xの値をたす
Player.x+4.0; //X軸+4動かす
[pre]if(Player.x>450.0) //画面の端に行き過ぎないための処理
[pre]Player.x=450.0; //画面の端に行き過ぎてたらXを450にする
[/pre][/pre]
}


if(Key[KEY_INPUT_UP]==1){ //左キーが押されたらPlayer.xの値をたす
Player.y+4.0; //Y軸+4動かす
[pre]if(Player.x<20.0) //画面の端に行き過ぎないための処理
[pre]Player.x=20.0; //画面の端に行き過ぎてたらYを20にする
[/pre][/pre]
}

if(Key[KEY_INPUT_RIGHT]==1){ //左キーが押されたらPlayer.xの値を引く
Player.x+4.0; //Y軸-4動かす
[pre]if(Player.y>470.0) //画面の端に行き過ぎないための処理
[pre]Player.x=470.0; //画面の端に行き過ぎてたらYを470にする
[/pre][/pre]
}

DrawGraph((int)Player.x-15, (int)Player.y-24, PlayerImg, TRUE); //プレイヤー TRUEは透過処理を行う
}
[/pre]
void Coordinates(){
Player.x=200.0;
Player.y=400.0;
}


以下cpp


#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){

char Key[256];
ChangeWindowMode( TRUE ) ;//ウィンドウモードに変更する関数
if( DxLib_Init() == -1 ) return -1;//初期化処理する関数
		
[pre]int FPS = 0;

SetDrawScreen( DX_SCREEN_BACK ) ; //画面裏設定
		
while(ProcessMessage() == 0 && GetHitKeyStateAll(Key) == 0){ //GetHitKesStateAllはキーボードのすべてのキーの押下状態を取得する
			

[pre]FPS = GetNowCount(); //現在の時間を取得
ClearDrawScreen(); //画面裏すべて削除
			
img();
BG();
Player();
ScreenFlip(); //裏画面データを表へ
			
if(Key[KEY_INPUT_ESCAPE]==1) break; //もしESCが押されたら終了
while(GetNowCount() - FPS <17);


}
WaitKey();
[/pre]
DxLib_End() ;//終了処理をする関数
return 0 ;
[/pre]
}

長文ですいませんがどなたか原因が分かる方がいらっしゃいましたら教えていただけると幸いです。
よろしくお願いいたします。

JK

Re:関数のエラー?

#2

投稿記事 by JK » 16年前

申し訳ありません。削除キーを入れ忘れてしまいました上にタグの使い方を誤っていたようです。
大変ご迷惑をおかけしました。この場を借りて謝罪させていただきます。

大変厚かましいと思いますがもし原因が分かる方がいらっしゃったら教えていただけますでしょうか
お願いいたします

conio

Re:関数のエラー?

#3

投稿記事 by conio » 16年前

これは、こうじゃないですか?
--------------------------
public SHOOT class{

class SHOOT{
--------------------------
それと、クラスの中で関数の定義を書いてますが、関数の宣言部と実装部は分けたほうが良いと思います。
で、クラスの閉じカッコが見当たらないんですけども、コピペミスですか?

WinMain関数内で、img();とか関数を読んでますけども、
C++のクラスはアクセス指定子をつけないと基本private属性になるのでアクセス出来ません。
というより、呼び出し方もおかしいです。

クラス型のオブジェクトを作り、メンバアクセス演算子 . で呼び出したりします。
------------
SHOOT st;
st.img();
------------


あと、クラス内部についてですが、
LoadGraph()やGetColor()はコンストラクタ内でやってしまった方がいいのではないでしょうか?

Player関数については、操作と描画を両方行っていますが 操作と描画は分けたほうが良いと思います。
その前に、構造体"BODY_player"のPlayer と、メンバ関数のPlayer()、名前が同じなので恐らく 多重定義の
エラーも出ると思います。
名前が被らないようにしてください。

zwi

Re:関数のエラー?

#4

投稿記事 by zwi » 16年前

そもそも疑問なんですが、C言語の基礎しか終わっていないと言われてますのでC++言語は理解されていないんですよね?クラスのインスタンスも作られていませんし。それなのになぜC++の機能であるクラスを使われているのでしょうか?
DXライブラリを使うならC言語だけで組めますし、C++を使うならC++を勉強する必要がありますが。
C++を更に覚えるのは大変ですよ。

まず、クラス宣言を外してください。それでC言語の文法になります。
public SHOOT class{
}
それで同じソース内にWinMainがあるならコンパイルが通ると思います。

閉鎖

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