別ファイルで定義した関数が実行されない

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

別ファイルで定義した関数が実行されない

#1

投稿記事 by wasawasa » 11年前

下記のように変数の初期化と初期化した変数のデータを表示する処理を記述したATile_ini関数をTileData.cppに書き、それをmain.cppのmain関数で呼び出す記述を書いて実行させたところ、hoge関数内で記述した初期化した変数のデータを表示する処理が実行されませんでした。おそらくATile_ini関数そのものが実行されなかったのだと思われますが、何故実行されなかったのでしょうか?どなたかよろしくお願いします。

TileData.cpp

コード:

#include "DxLib.h"
#include "stdio.h"
#include "TileDataFrame.h"
#include "main.h"

struct ATileData ATile[18];

void ATile_ini(){
    int file,i,j,k,n=0,m=0,ed=0;
	int l;//テスト
    int text[32];
    char textc[32];
	int ATRule[48][4][2];
	int Pic[192];
	int maketipsc;//オートタイルチップを作成するスクリーン
	char FPass[] = "./Data/Pics/TileA/";
	char Exten[] = ".png";
	char pass[64];
	//-オートタイル格納用配列の読み込み-
	file = FileRead_open( "./Data/Txt/ATileRuleData.txt" ) ;
	if(file==NULL){printfDx("read error\n");return;}
	while(1){
        for(i=0;i<32;i++){
            text[i] = FileRead_getc(file);
            textc[i] = text[i];
            if(textc[i]=='/'){while(FileRead_getc(file)!='\n'){i=-1;continue;}}
            if(text[i]==',' || text[i]=='\n'){textc[i]='\0';break;}
            if(text[i]==EOF){ed=1;break;}
        }
		if(ed==1){FileRead_close(file);break;}
		ATRule[m/8][(m/2)%4][m%2] = atoi(textc);
        m++;
	}
	n=0;m=0;ed=0;
	//-オートタイルデータの読み込み-
    file = FileRead_open( "./Data/Txt/ATileData.txt" ) ;
    if(file==NULL){printfDx("read error\n");return;}
    while(1){
        for(i=0;i<32;i++){
            text[i] = FileRead_getc(file);
            textc[i] = text[i];
            if(textc[i]=='/'){while(FileRead_getc(file)!='\n'){i=-1;continue;}}
            if(text[i]==',' || text[i]=='\n'){textc[i]='\0';break;}
            if(text[i]==EOF){ed=1;break;}
        }
        if(ed==1){FileRead_close(file);break;}
        switch(m){
			case 0: for(i=0;i<32;i++){
				ATile[n].name[i] = textc[i];
					}
					break;
            case 1: ATile[n].pri = atoi(textc);break;
            case 2: ATile[n].pat = atoi(textc);break;
        }
        m++;
        if(m==3){m=0;n++;}
    }
	//画像データの読み込み
	for(i=0;i<18;i++){
		
		strcpy(pass,FPass);strcat(pass,ATile[i].name);strcat(pass,Exten);
		for(j=0;j<192;j++){
			Pic[j] = MakeGraph(16,16);
		}
		LoadDivGraph( pass , 48*ATile[i].pat , 6*ATile[i].pat , 8 , 16 , 16 , Pic ) ;
		for(k=0;k<4;k++){
			for(j=0;j<48;j++){
				ATile[i].pics[k][j] = MakeGraph(32,32);
			}
		}
		for(k=0;k<ATile[i].pat;k++){
			for(j=0;j<48;j++){
				maketipsc = MakeScreen( 32, 32, TRUE ) ;
				SetDrawScreen( maketipsc ) ;
				DrawGraph( 0, 0,Pic[ATRule[j][0][0]+6*ATRule[j][0][1]*ATile[i].pat],TRUE);
				DrawGraph(16, 0,Pic[ATRule[j][1][0]+6*ATRule[j][1][1]*ATile[i].pat],TRUE);
				DrawGraph( 0,16,Pic[ATRule[j][2][0]+6*ATRule[j][2][1]*ATile[i].pat],TRUE);
				DrawGraph(16,16,Pic[ATRule[j][3][0]+6*ATRule[j][3][1]*ATile[i].pat],TRUE);
				SetDrawScreen( DX_SCREEN_FRONT ) ;
				ATile[i].pics[k][j] = maketipsc;
			}
		}		
		memset(pass,0,sizeof(pass));
	}
	
	//-テスト-
	for(i=0;i<18;i++){
		ClearDrawScreen();//テスト
		for(l=0;l<4;l++){
			for(j=0;j<3;j++){
				for(k=0;k<16;k++){
					DrawGraph(j*34+l*110,k*34,ATile[i].pics[l][j*16+k],TRUE);
				}
			}
		}
		ScreenFlip();WaitKey();//テスト
	}
}
TileDataFrame.h

コード:

#ifndef DEF_TileDataFrame_H //二重include防止
#define DEF_TileDataFrame_H

struct ATileData{
	int pics[4][48];//
	int pri;//
	int pat;//
	char name[32];//画像名
};
struct NTileData{
	int pics[264];
	int pri[264];
	char name;//画像名
};

#endif
main.cpp

コード:

#include "DxLib.h"
#include "main.h"

int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
        ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen( DX_SCREEN_BACK ); //ウィンドウモード変更と初期化と裏画面設定

		ATile_ini();
        
        DxLib_End(); // DXライブラリ終了処理
        return 0;
}  
main.h

コード:

#ifndef DEF_Main_H //二重include防止
#define DEF_Main_H

//-TileData.cpp-
void ATile_ini();

#endif

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

Re: 別ファイルで定義した関数が実行されない

#2

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

提示されたコードの中にhoge関数を呼び出している部分が見当たらないので、ATile_ini関数が実行されていても
hoge関数内で記述した初期化した変数のデータを表示する処理が実行されないのは当たり前だと思います。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

wasawasa
記事: 94
登録日時: 11年前

Re: 別ファイルで定義した関数が実行されない

#3

投稿記事 by wasawasa » 11年前

>>みけCATさん
すみません、文の内容を打ち間違えました。
初期化した変数のデータを表示する処理を記述したのはhoge関数ではなくてATile_ini関数です。

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

Re: 別ファイルで定義した関数が実行されない

#4

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

wasawasa さんが書きました:おそらくATile_ini関数そのものが実行されなかったのだと思われますが
本当にそんな謎現象が起こっているのですか?
例えば、ATile_ini関数の最初の行でMessageBox関数を利用してダイアログを出す処理を入れる、デバッガを使う、
などの手段で、本当にATile_ini関数が実行されていないかどうか確認してください。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

wasawasa
記事: 94
登録日時: 11年前

Re: 別ファイルで定義した関数が実行されない

#5

投稿記事 by wasawasa » 11年前

MessageBox関数を使ってもう一度確認してみたらATile_ini関数の中でメッセージボックスが表示される場所とされない場所が確認でき、そこから参照しているフォルダーがごっそり抜け落ちていたのが原因だという事が分かって無事解決できました。ありがとうございます。

ちなみに、みけCATさんにご指摘いただくまではprintfDX関数をATile_ini関数の随所に挿入して動作状況を確認していたのですが、こちらで確認しようとすると現状でも文字が表示されないままのようです。
お騒がせついでにこちらの理由についてもお尋ねしてよろしいでしょうか?

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

Re: 別ファイルで定義した関数が実行されない

#6

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

wasawasa さんが書きました:ちなみに、みけCATさんにご指摘いただくまではprintfDX関数をATile_ini関数の随所に挿入して動作状況を確認していたのですが、こちらで確認しようとすると現状でも文字が表示されないままのようです。
お騒がせついでにこちらの理由についてもお尋ねしてよろしいでしょうか?
ScreenFlipしていない、もしくは表示を見る前にreturnしてDxLib_Endで終了してしまうからではないでしょうか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

wasawasa
記事: 94
登録日時: 11年前

Re: 別ファイルで定義した関数が実行されない

#7

投稿記事 by wasawasa » 11年前

>ScreenFlipしていない、もしくは表示を見る前にreturnしてDxLib_Endで終了してしまうからではないでしょうか?
見直してみてやっと理解できました。ありがとうございます。

閉鎖

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