ページ 1 / 1
ヘッダーでの関数定義
Posted: 2009年12月04日(金) 09:00
by 寺初心者
ttp://okabi.blog92.fc2.com/blog-entry-523.html
上の関数を使ってfpsを安定化させようと思っています。初心者なのでよくわからいんですが
上の関数コードをヘッダーファイルに張り付けてインクルードして
メインプログラムに表示させるとエラーばかりでます。
アホか?って思うと思いますがなぜか分かりません。
特に
ヘッダーで定義した関数をメインファイルで書いてをコンパイルしたら、その関数は識別されていませんって
エラーをはくことがあります。関数の定義はどのようにするべきなのですか?
よろしくお願いします。
Re:ヘッダーでの関数定義
Posted: 2009年12月04日(金) 09:13
by Libra
原因となりそうなものを
・BCCでコンパイルするとき
ファイルを複数に分けてコンパイルするときは、
makefileを作らないと上手く行きません。
開発環境がVisualStudioであればこの操作を自動でやってくれます。
・ヘッダーファイルにソースを書いているため、インクルードの順番で認識されない
ヘッダーファイルにはプロトタイプ宣言を書くものです。
書き方が悪いと、自作ヘッダのインクルードする順番によって、
別のソースで自作ヘッダが呼び出される前に関数が呼び出されて、
認識されないことがあるかもしれません。
開発環境やソースがないと、原因を予測しか出来ません。
開発環境を提示し、ソースを添付したら(誰かが)対応してくれると思います。
Re:ヘッダーでの関数定義
Posted: 2009年12月04日(金) 09:14
by バグ
DXライブラリを使用したソースのようですが、ヘッダにはDXライブラリをインクルードされていますか?
Re:ヘッダーでの関数定義
Posted: 2009年12月04日(金) 09:39
by 寺初心者
ヘッダーにDXライブラリをインクルードしています。
上のソースファイルをヘッダーに張り付けて
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode( TRUE ) ;//ウィンドウモードに変更する関数
if( DxLib_Init() == -1 ) return -1;//初期化処理する関数
Fps(); //ヘッダーで定義した関数
WaitKey() ;//何か入力があるまで待つ関数
DxLib_End() ;//終了処理をする関数
return 0 ;
}
って簡単に言えば書いてるとおもいますけど、これじゃだめなんですか?
コンパイルはVC++EEです。
Re:ヘッダーでの関数定義
Posted: 2009年12月04日(金) 09:46
by 寺初心者
#include "DxLib.h"
#include "function.h"//Fps()が入ったヘッダー
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode( TRUE ) ;//ウィンドウモードに変更する関数
if( DxLib_Init() == -1 ) return -1;//初期化処理する関数
Fps(); //ヘッダーで定義した関数
WaitKey() ;//何か入力があるまで待つ関数
DxLib_End() ;//終了処理をする関数
return 0 ;
}
です。すいません。
Re:ヘッダーでの関数定義
Posted: 2009年12月04日(金) 10:04
by non
どんなエラーか、たくさん出るなら最初の10個ぐらいでも良いので貼り付けてください。
Re:ヘッダーでの関数定義
Posted: 2009年12月04日(金) 10:25
by 寺初心者
: error C3872: '0x3000': この文字を識別子で使用することはできません
: error C2065: ' double' : 定義されていない識別子です。
: error C2146: 構文エラー : ';' が、識別子 'FRAME' の前に必要です。
: error C2065: 'FRAME' : 定義されていない識別子です。
: error C3872: '0x3000': この文字を識別子で使用することはできません
: error C2065: ' static' : 定義されていない識別子です。
: error C2144: 構文エラー : 'double' は ';' によって先行されなければなりません。
: error C3872: '0x3000': この文字を識別子で使用することはできません
: error C2065: ' static' : 定義されていない識別子です。
: error C2144: 構文エラー : 'double' は ';' によって先行されなければなりません。
: error C2065: 'FRAME' : 定義されていない識別子です。
: error C3872: '0x3000': この文字を識別子で使用することはできません
: error C2065: ' static' : 定義されていない識別子です。
: error C2144: 構文エラー : 'double' は ';' によって先行されなければなりません。
定義されていないってはくんでヘッダーになにかインクルードするんじゃないかと
思います。それとも張り付けたのがいけないのか?
ちなみにヘッダーのインクルードはDXライブラリだけです。
Re:ヘッダーでの関数定義
Posted: 2009年12月04日(金) 10:30
by softya
全角空白がソースコードに紛れ込んでいますね。
文字列中以外で全角空白を使うとエラーになりますよ。
Re:ヘッダーでの関数定義
Posted: 2009年12月04日(金) 10:50
by 寺初心者
ありがとうございます。動きました。
しかし、この方も他の方もそうですが
fps関数をいれるとなぜかカクカク動くようになります。
なぜこのようになるのでしょうか?
いれないとそれなりにスムーズなのですが・・・
もし、そうならないfps関数があったのならおしえてくれませんか?
よろしくお願いします。
Re:ヘッダーでの関数定義
Posted: 2009年12月04日(金) 10:50
by non
スペースの部分を消して、半角でスペースまたはTABを入力しなおしてください。
Re:ヘッダーでの関数定義
Posted: 2009年12月04日(金) 11:37
by 寺初心者
ありがとうございます。みなさんのおかげで
解決しました。
もうひとつ質問ができましたのでよければご意見きかせてください。