タイトル作成でのエラー

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

タイトル作成でのエラー

#1

投稿記事 by 名無し » 14年前

#include "GV.h"

void title_disp(int x , int y , char title[] , const char **str , int &menu ){
int num=0;
int dx=0,len=0;
const char **str2 = str;

//タイトル表示
dx = x - GetDrawFormatStringWidthToHandle( font[1], title ) / 2;
DrawFormatStringToHandle( dx, y, color[0], font[1], "%s", title );
y += 30; //改行

//情報の取得
while ( strcmp( *str2, "NULL" ) != 0 )
{
if( len < GetDrawFormatStringWidthToHandle( font[0] , *str2 ) )
{
len = GetDrawFormatStringWidthToHandle( font[0] , *str2 );
}
++num;
*str2++;
}
dx = x - len / 2;

//選択制御
if( CheckStatePad(configpad.up) == 1 && menu > 0 )
--menu;
else if( CheckStatePad(configpad.up) == 1 )
menu = num-1;
if( CheckStatePad(configpad.down) == 1 && menu < num-1 )
++menu;
else if( CheckStatePad(configpad.down) == 1 )
menu = 0;

y += menu * 20;
SetDrawBlendMode( DX_BLENDMODE_ALPHA , 100 ) ;
DrawBox( dx-10 , y , dx+10 + len , y + 18 , color[5] , TRUE ) ; //選択位置の表示
SetDrawBlendMode( DX_BLENDMODE_NOBLEND , 0 ) ;
y -= menu * 20;

//項目の表示
while ( strcmp( *str, "NULL" ) != 0 )
{
dx = x - GetDrawFormatStringWidthToHandle( font[0] , *str ) / 2;
DrawFormatStringToHandle( dx, y, color[0], font[0], "%s", *str++);
y += 20;
}
}

void game_start(){
// constでデータが書き換わらないようにする
const char *str[] =
{
{"START"},
{"EXIT"},
{"NULL"} // NULL文字列で終了を示す(小文字不可)
};
static int menu;

title_disp( FIELD_X+FIELD_MAX_X/2 , FIELD_Y+FIELD_MAX_Y/3 , " " , str, menu );

if( CheckStatePad(configpad.shot) == 1 )
{
switch(menu)
{
case 0:
func_state = 99; //メインに戻る
break;
case 1:
printfDx("不明なメニューが選択されました ");
break;
}

}
}


void title_main(){
title_disp();
game_start();
}


上のプログラムを打ってタイトルを作ろうとしたところ

’title_disp’関数に 0 個の引数を指定できません。
とエラーが出ました。

どこを修正することで治せるでしょうか?

アバター
ookami
記事: 214
登録日時: 14年前
住所: 東京都

Re: タイトル作成でのエラー

#2

投稿記事 by ookami » 14年前

> ’title_disp’関数に 0 個の引数を指定できません。

ということは、

> title_disp();

の部分に問題があります。
宣言を見ると、

void title_disp(int x , int y , char title[] , const char **str , int &menu )

となっているので、
この関数には、5つの引数がないといけませんね。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: タイトル作成でのエラー

#3

投稿記事 by softya(ソフト屋) » 14年前

void title_disp(int x , int y , char title[] , const char **str , int &menu ){
と定義されていますので引数は必須です。
ところが、

コード:

void title_main(){
	title_disp();
	game_start();
}
title_disp();では引数がありません。
これがエラーの原因です。

あと、コードタグを使ってもらうと読みやすくなるので次回からは使ってくださいね。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

名無し

Re: タイトル作成でのエラー

#4

投稿記事 by 名無し » 14年前

void title_main(){
title_disp();
game_start();
}

からtitle_disp();消去で起動しました ありがとうございます

Wpa
記事: 11
登録日時: 14年前

Re: タイトル作成でのエラー

#5

投稿記事 by Wpa » 14年前

ども、
ソフト屋さんのを解釈すると
こうです
void title_disp(int x , int y , char title[] , const char **str , int &menu )
こうなってますね
なら、関数を呼び出したときにはこう書きます

void title_main(){
int x
int y
char title[]
const char **str
int &menu //めんどくさいですがいちいち呼び出します
void title_disp(x,y ,title[] ,**str,&menu );
game_start();
}
つまり()内に宣言を書くと結構メンドイです(利点や特徴を知らない私が言いますので、あしからず)

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: タイトル作成でのエラー

#6

投稿記事 by softya(ソフト屋) » 14年前

名無し さんが書きました:void title_main(){
title_disp();
game_start();
}

からtitle_disp();消去で起動しました ありがとうございます
それは結局呼び出しを無くしただけで解決になっているんでしょうか?

それと、Wpaさん。
そのコードはサンプルとしてやばいです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Wpa
記事: 11
登録日時: 14年前

Re: タイトル作成でのエラー

#7

投稿記事 by Wpa » 14年前

サーセン適当に書いたのでw
まあ、
void title_disp(x,y ,title[] ,**str,&menu );
↑これを覚えてもらえばいいってことです
全部見てないのでこれくらいしかいえません。
また、間違えがあれば訂正または注意してもらってかまいません
あと、ついでに初歩的ですが考え方が楽なパターンも紹介します

int y=200;
int x=250;
void opening_disp(int White){ //色の取得


DrawString( x , y , "■" , White );
DrawString( 270 , 200 , "GAME START" , White );
DrawString( 270 , 250 , "未設定" , White );
DrawString( 270 , 300 , "未設定" , White );
DrawString( 270 , 350 , "終了" , White );
}
void opening_control(){
int White;
White = GetColor( 210 , 220 , 255 ) ;

opening_disp(White);

if(CheckStatePad(configpad.down)==1){
y+=50;
if(y==400){
y=200;
}
}
if(CheckStatePad(configpad.up)==1){
y-=50;
if(y==150){
y=350;
}
}
if(CheckStatePad(configpad.shot)>0){
if(y==200){

func_state=99;

}
if(y==350){

DxLib_End();//DXライブラリ終了処理
}
}
}

理屈は簡単です
ショットボタンを押して
yが200だったらゲームスタート
yが350だったらライブラリ終了です(龍神録はDX使ってましたよね?)
ってな感じです
あとは

void title_main(){//整理用にあるだけ
void opening_control()
//opening_dispは↑ですでに呼んでいるのでいりません
}

これで完成ですかね?
コード形式はコピペするとメンドいのでやめました

アバター
ookami
記事: 214
登録日時: 14年前
住所: 東京都

Re: タイトル作成でのエラー

#8

投稿記事 by ookami » 14年前

> サーセン適当に書いたのでw
> まあ、
> void title_disp(x,y ,title[] ,**str,&menu );
> ↑これを覚えてもらえばいいってことです

いやその部分がまずいですねww
細かく指摘したほうがいいんでしょうかどうでしょうかwww

Wpa
記事: 11
登録日時: 14年前

Re: タイトル作成でのエラー

#9

投稿記事 by Wpa » 14年前

結構アバウトに覚えてるので、教えてもらえると助かります・・・
・・・あれ?よう見たら
main関数に入れるものじゃないですねこれ
しっかり見ない自分があほだったという事ですか・・・w
自分の言ってることの何がおかしいか理解しました。どうも失礼。

閉鎖

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