ヘッダーでの関数定義

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

ヘッダーでの関数定義

#1

投稿記事 by 寺初心者 » 15年前

ttp://okabi.blog92.fc2.com/blog-entry-523.html

上の関数を使ってfpsを安定化させようと思っています。初心者なのでよくわからいんですが
上の関数コードをヘッダーファイルに張り付けてインクルードして
メインプログラムに表示させるとエラーばかりでます。
アホか?って思うと思いますがなぜか分かりません。

特に
ヘッダーで定義した関数をメインファイルで書いてをコンパイルしたら、その関数は識別されていませんって
エラーをはくことがあります。関数の定義はどのようにするべきなのですか?

よろしくお願いします。

Libra

Re:ヘッダーでの関数定義

#2

投稿記事 by Libra » 15年前

原因となりそうなものを


・BCCでコンパイルするとき
ファイルを複数に分けてコンパイルするときは、
makefileを作らないと上手く行きません。
開発環境がVisualStudioであればこの操作を自動でやってくれます。


・ヘッダーファイルにソースを書いているため、インクルードの順番で認識されない
ヘッダーファイルにはプロトタイプ宣言を書くものです。
書き方が悪いと、自作ヘッダのインクルードする順番によって、
別のソースで自作ヘッダが呼び出される前に関数が呼び出されて、
認識されないことがあるかもしれません。


開発環境やソースがないと、原因を予測しか出来ません。
開発環境を提示し、ソースを添付したら(誰かが)対応してくれると思います。

バグ

Re:ヘッダーでの関数定義

#3

投稿記事 by バグ » 15年前

DXライブラリを使用したソースのようですが、ヘッダにはDXライブラリをインクルードされていますか?

寺初心者

Re:ヘッダーでの関数定義

#4

投稿記事 by 寺初心者 » 15年前

ヘッダーに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:ヘッダーでの関数定義

#5

投稿記事 by 寺初心者 » 15年前

#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 ;
}

です。すいません。

non

Re:ヘッダーでの関数定義

#6

投稿記事 by non » 15年前

どんなエラーか、たくさん出るなら最初の10個ぐらいでも良いので貼り付けてください。

寺初心者

Re:ヘッダーでの関数定義

#7

投稿記事 by 寺初心者 » 15年前

: 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ライブラリだけです。

softya

Re:ヘッダーでの関数定義

#8

投稿記事 by softya » 15年前

全角空白がソースコードに紛れ込んでいますね。
文字列中以外で全角空白を使うとエラーになりますよ。

寺初心者

Re:ヘッダーでの関数定義

#9

投稿記事 by 寺初心者 » 15年前

ありがとうございます。動きました。
しかし、この方も他の方もそうですが
fps関数をいれるとなぜかカクカク動くようになります。
なぜこのようになるのでしょうか?
いれないとそれなりにスムーズなのですが・・・
もし、そうならないfps関数があったのならおしえてくれませんか?
よろしくお願いします。

non

Re:ヘッダーでの関数定義

#10

投稿記事 by non » 15年前

スペースの部分を消して、半角でスペースまたはTABを入力しなおしてください。

寺初心者

Re:ヘッダーでの関数定義

#11

投稿記事 by 寺初心者 » 15年前

ありがとうございます。みなさんのおかげで
解決しました。
もうひとつ質問ができましたのでよければご意見きかせてください。

閉鎖

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