ページ 11

違うcppに書いた関数を読み込んでくれません

Posted: 2009年3月22日(日) 18:42
by aiukao
高校3年です。VISTA
このサイトを参考にC++でシューティング作ろうとしています。
龍神録をみてみるとプログラムごとにcppを分けていました。自分は最初一つのcppでやっていたんですがそのときはうまくいったのですが分けてみると、うまく関数を呼ぶことができません。
キーの取得は3章のとおりに書いたらうまく関数を読むことができました。
メッセージボックスを表示してウィンドウサイズかフルスクリーンか選びたいのですが

error C3861: 'messagebox_screen': 識別子が見つかりませんでした
main.cpp
main(){

messagebox_scrren();

}
message.cpp
int messagebox_screen(){													//スクリーンモード選択
        int flag;
        flag=MessageBox(
                NULL ,
                TEXT("フルスクリーンモードで起動しますか?") ,
                TEXT("スクリーン設定") , 
                MB_YESNO | MB_ICONQUESTION );
        if(flag==IDNO)
                ChangeWindowMode( TRUE );
		
}
どうすれば関数を読めるでしょうか?お願いします

Re:違うcppに書いた関数を読み込んでくれません

Posted: 2009年3月22日(日) 18:46
by たかぎ
> messagebox_scrren();

つづりが間違っているだけとか?

けれども、エラーメッセージが本当に

> error C3861: 'messagebox_screen': 識別子が見つかりませんでした

であれば違いますね。
たぶん、関数の宣言を忘れているだけかと思います。

Re:違うcppに書いた関数を読み込んでくれません

Posted: 2009年3月22日(日) 19:24
by aiukao
すいません 本当は messagebox0と宣言していまして0じゃ教えてもらうのにわかりにくいと思いmessagebox_screenと表記したためミスをしていました。書き直して書いてみました↓
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
       

main.cpp 

messagebox_screen();
.
.
.
.
たぶん下はあまり関係ないと思っています.


message.cpp


int messagebox_screen(){													//スクリーンモード選択
        int flag;
        flag=MessageBox(
                NULL ,
                TEXT("フルスクリーンモードで起動しますか?") ,
                TEXT("スクリーン設定") , 
                MB_YESNO | MB_ICONQUESTION );
        if(flag==IDNO)
                ChangeWindowMode( TRUE );
		
}
です。エラーは error C3861: 'messagebox_screen': 識別子が見つかりませんでした とでます。


本当に申し訳ありません

質問ですが違うcppから関数を呼ぶために何か特別なことは必要でしょうか?

Re:違うcppに書いた関数を読み込んでくれません

Posted: 2009年3月22日(日) 19:29
by aiukao
すいません

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){





main.cpp
が逆ですね、 正しくは

main.cpp

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){

です

もっと確認してから載せたいと思います

Re:違うcppに書いた関数を読み込んでくれません

Posted: 2009年3月22日(日) 20:33
by yu
あくまで推測ですが、cppファイルはどこのフォルダに追加されましたか?
龍神録ならmydatフォルダ→sourceフォルダを選択してsourceフォルダの中にファイルを入れてください。

messagebox_screen()がint型で値を返していないのに、そのエラーが出ていないので

voidにすれば問題無いと思います。


そして、他のファイルで宣言した関数を呼び出すためにはそのファイルでは
extern宣言をしなければなりません。
main.cppの上の方に

extern void messagebox_screen();


と書いてみてください。
(message.cpp内のmessagebox_screen()をint型からvoid型に直してくださいね)

extern宣言 と検索すれば多く出てくるかと思います。

龍神録の館5章でもおさらいされています。
いろいろと自分の回答が間違っているかもしれません。orz

Re:違うcppに書いた関数を読み込んでくれません

Posted: 2009年3月22日(日) 23:40
by aiukao
ありがとうございます!!!!
言われて気づきました!!龍神録ではGV.hにまとめていたのを忘れていました
GV.hに書き込んでみたところうまく読みました!ありがとうございました!