- ベストアンサー
コードの分割について
環境 WIN98 VC++6.0 MFC にて CFormViewにボタンを沢山貼りつけています。 ボタンを押したときに実行されるコードを、myview.cppに書いているのですが、だんだんコードが大きくなったきて、どこに何を書いたか探すのも大変になってきました。 そこで void CMyView::OnButton5() { 関数; } の関数を別のファイルにしたいのですが、例えばmykansu.cppを作って#include "mykansu.cpp"見たいな感じで使えるようにしたいのですが、これではうまく行きません。 どうすれば分割できるのですか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>>その3 >>イベントハンドラの処理をグローバルな関数に >>するのではなく、CMyViewのメンバ関数として >>定義しないとまずいと思うのですが、メンバ変数は >>使わない処理だけなのですか? >>そんなことはないですよね。 > >まさにおっしゃる通りです。 >そのような状況において、長ったらしくなったコードを >分割できるのかどうかが知りたいのです。 void myFunc() ではなく、 void CMyView::myFunc() とすれば、解決です。 もちろん、CMyViewのメンバ関数となるので、このmyFuncの定義はMyView.hの中になるのはわかりますよね? foo.hは不要です。 呼び出し元は、これでかまいません。 void CMyView::OnButton5() { myFunc(); } あとは、 >myclass MyC;//自作クラスのオブジェクトの作成 ですが、 追加のソースのほうにはextern宣言をしてあげれば 使用可能です。 //foo.cpp extern myclass MyC;
その他の回答 (3)
- GAIA9916
- ベストアンサー率42% (17/40)
分割コンパイルではありませんよね? ただインクルードするだけであれば、#1さんの回答通りだと思います。 MyView.cpp内のソースをカットして、 #include "xxxxxx.cpp" に書き換え、 xxxxxx.cppにペーストするだけです。 分割コンパイルであれば、そのコンパイル時にエラーが出ているのでしょうか? MyCの位置がCMyView.cpp内で定義されているのであれば、別ファイルから参照するために、 extern class クラス名 MyC; を入れてみてください。
お礼
回答ありがとうございます。 ちょっと今回は難しすぎたので、もう少しシンプルな構成で考えてみます。
- taka_tetsu
- ベストアンサー率65% (1020/1553)
その1 >// MyView.cpp >#include "foo.h" #include "stdafx.h" も入れてくださいね。同じにしてってことで。 あと、MyView.hってないんですか? その2 >myclass MyC;//自作クラスのオブジェクトの作成 myclassの定義はどこにあるんですか? その3 イベントハンドラの処理をグローバルな関数に するのではなく、CMyViewのメンバ関数として 定義しないとまずいと思うのですが、メンバ変数は 使わない処理だけなのですか? そんなことはないですよね。
お礼
回答ありがとうございます。 その1 >// MyView.cpp >#include "foo.h" //新規に追加 >#include "stdafx.h" >も入れてくださいね。同じにしてってことで。 >あと、MyView.hってないんですか? 新規に追加したヘッダーしか書いていませんが、その他は勿論最初からインクルードしています。 その2 >myclass MyC;//自作クラスのオブジェクトの作成 m>yclassの定義はどこにあるんですか? myclass.hとmyclass.cppが別にあります。 その3 まさにおっしゃる通りです。 そのような状況において、長ったらしくなったコードを分割できるのかどうかが知りたいのです。
- taka_tetsu
- ベストアンサー率65% (1020/1553)
includeのみ分割元のソースと同じものを記述するだけ。 #たいていはこれでうまくいくかと。だめなパターンもあるので。
お礼
回答ありがとうございます。 実際は以下のように自作クラスを使っているので、無理なのかなと思い始めましたが、どうなのでしょうか? // foo.h void myFunc(); // foo.cpp #include "stdafx.h" #include "foo.h" void myFunc() { // CMyView::OnButton5()の処理を持ってくる // コード1行目 // コード2行目 // ・ // ・ // コードn行目 } // MyView.cpp #include "foo.h" myclass MyC;//自作クラスのオブジェクトの作成 void CMyView::OnButton5() { MyC.show();//このように自作クラスが使われている。 ・ //ここも自作クラスが使われている。 ・ //ここも自作クラスが使われている。 }
お礼
回答ありがとうございます。 ちょっと今回は難しすぎたので、もう少しシンプルな構成で考えてみます。