• ベストアンサー

コードの分割について

環境 WIN98 VC++6.0 MFC にて CFormViewにボタンを沢山貼りつけています。 ボタンを押したときに実行されるコードを、myview.cppに書いているのですが、だんだんコードが大きくなったきて、どこに何を書いたか探すのも大変になってきました。 そこで void CMyView::OnButton5() { 関数; } の関数を別のファイルにしたいのですが、例えばmykansu.cppを作って#include "mykansu.cpp"見たいな感じで使えるようにしたいのですが、これではうまく行きません。 どうすれば分割できるのですか?

質問者が選んだベストアンサー

  • ベストアンサー
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.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;

mk1234
質問者

お礼

回答ありがとうございます。 ちょっと今回は難しすぎたので、もう少しシンプルな構成で考えてみます。

その他の回答 (3)

  • GAIA9916
  • ベストアンサー率42% (17/40)
回答No.3

分割コンパイルではありませんよね? ただインクルードするだけであれば、#1さんの回答通りだと思います。 MyView.cpp内のソースをカットして、 #include "xxxxxx.cpp" に書き換え、 xxxxxx.cppにペーストするだけです。 分割コンパイルであれば、そのコンパイル時にエラーが出ているのでしょうか? MyCの位置がCMyView.cpp内で定義されているのであれば、別ファイルから参照するために、 extern class クラス名 MyC; を入れてみてください。

mk1234
質問者

お礼

回答ありがとうございます。 ちょっと今回は難しすぎたので、もう少しシンプルな構成で考えてみます。

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.2

その1 >// MyView.cpp >#include "foo.h" #include "stdafx.h" も入れてくださいね。同じにしてってことで。 あと、MyView.hってないんですか? その2 >myclass MyC;//自作クラスのオブジェクトの作成 myclassの定義はどこにあるんですか? その3 イベントハンドラの処理をグローバルな関数に するのではなく、CMyViewのメンバ関数として 定義しないとまずいと思うのですが、メンバ変数は 使わない処理だけなのですか? そんなことはないですよね。

mk1234
質問者

お礼

回答ありがとうございます。 その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)
回答No.1

includeのみ分割元のソースと同じものを記述するだけ。 #たいていはこれでうまくいくかと。だめなパターンもあるので。

mk1234
質問者

お礼

回答ありがとうございます。 実際は以下のように自作クラスを使っているので、無理なのかなと思い始めましたが、どうなのでしょうか? // 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();//このように自作クラスが使われている。 ・     //ここも自作クラスが使われている。 ・     //ここも自作クラスが使われている。 }

関連するQ&A

専門家に質問してみよう