• 締切済み

プログラムファイルの分割で…

shirousa01の回答

回答No.2

C++に於いて、ヘッダ内で関数を定義すると、インライン関数として扱われます。 また、C++のヘッダはドキュメントとして扱われることも多く、ライブラリなどでは.h、.lib、.dllだけ公開されて.hに関数の使い方や、引数、また各種例外まで文書として書かれていることもあります。 この場合、実体がヘッダに書かれていると非常に見にくくなります。 それに、ヘッダ内でのみ記述する場合と、ヘッダとソースに分けて記述する場合とで宣言に微妙な差異があることも多く、オススメできません。 まだ簡単なプログラムしか組んでいなく、必要性を理解できないかもしれませんが、絶対必要になることです。 今から分けることを当たり前として、後に苦労しないようする方が賢明と思います。

k1220011_2005
質問者

お礼

ご回答いただき,ありがとうございます!! 後に苦労するのは嫌です。 将来のことを考えて,分けて記述することにしました。 ありがとうございました。

関連するQ&A

  • フォームプログラムでのファイル分割

    先日よりお世話になっています。VC++フォームプログラムのスコープに関する質問です。 フォームプログラムではデザイナモードでGUIで作成したデザインや割り込み、プロパティなどが、自動的にソースとして全てForm1.hに作成されます。さらに自分で処理を追加していくわけですが、Form1.hが膨大になってしまうこともあり、デザインに関する部分以外を別のファイルanother.cppで書きたいのですがうまくいきません。どうか知恵をお貸しください。 まず、現在のForm1.hの構成は、 --Form1.h----------------------------------------------------- namespace namForm1{ class Form1{ private: void func(); //プロトタイプ ・・・・・・・・ } ・・・・・ } void namForm1::Form1::func(){・・・} //関数定義 --------------------------------------------------------------- のようになっており、ここでフォームプログラムの処理が全て記載され、実質のメインともいえるような作りになっています。 ですが、Form1.hのコード量が増えて見辛くなることを嫌って、Form1.hで書いてある関数func()などを内容をanother.cppに出したいのです。another.cppからnamForm1の名前空間を使おうとしても、当然「識別子がクラス名でも名前空間名でもありません。」怒られますし、another.cppにForm1.hをインクルードしてもやはり、「識別子がクラス名でも名前空間名でもありません。」となります。このプログラムをスマートにファイル分割する方法を教えてください。お願いします。

  • ソースファイルの分割について

    a.h クラスの定義 a.cpp クラスのメンバ関数の定義 b.h #include "a.h" クラスの定義 b.cpp クラスのメンバ関数の定義 ----c.cpp---- #include "a.h" #include "b.h" a.hで定義したクラスの宣言 b.hで定義したクラスの宣言 メインの処理 ----------------------------------------- b.cppで定義しているクラスのメンバ関数にて a.cppで定義したクラスのメンバ変数にアクセスしたいのです。 どうするのが一番良いのでしょうか? a.cppにメンバ変数を返すだけの関数を定義してb.cppでc.cppで宣言したa.hのクラスを extern宣言してみたのですがエラーが出てコンパイルが通らないです。

  • プログラムのファイル分割。

    現在C++を学んでいるものです。 ソースファイルの分割についての質問です。よろしくお願いします。 環境はVisual Studio 2005です。 ファイルを      myheader.h      main.cpp      function.cpp と分ける事を考えると、例えば単純な int max(int num1, int num2){ if(num1 > num2) return num1; else return num2; } という関数を考えた場合、 myheader.hには関数maxの宣言int max(int num1, int num2);を。 function.cppには上記の関数maxの内容を。 そしてmain.cppで関数maxを使用するといったように分割し、実行することまでは自分でできます。 ですが、上記の関数をテンプレートを使って、どの型でも使用可能にするには、myheader.h、function.cppにはどのように記述したらよいでしょうか? テンプレートを使った関数は普通ですが、 template <class T> T max(T num1, Tnum2){ if(num1 > num2) return num1; else return num2; } というように記述したいと考えています。 よろしくお願いします

  • ソースファイルの分割

    自分で作成したプログラムが長くなってしまったのでいくつかのファイルに分割したいのですが、一般にはどのように分けるのでしょうか? 作成したプログラムは以下のような内容を含んでいます。 クラス  クラスの定義  メンバ関数の定義 関数×2  定義  プロトタイプ宣言 main関数 プリプロセッサ制御文も教えてくださると助かります。

  • 複数ファイルによる共通の外部変数定義について

    初歩的な質問なのですが、今各関数をファイルごとに分けて記述しようとしています。 ここで詰まっているのでできればご教授お願いします ファイル構成は プログラムファイル main.cpp sub.cpp ヘッダーファイル  myheader.h(main.cppとsub.cpp両方でインクルード) ヘッダーファイルには両方のプログラムファイルで使う変数が定義してあります。 それでmain.cppとsub.cpp両方で同じ変数を使いたいのですがコンパイルエラーが発生してしまいます。 内容はsub.obj側で「i(共通のループカウンタ)はmain.objですでに定義されています」というものです。 とにかく私のやりたいことはヘッダーに外部変数を定義して両方のプログラムファイルで使いたいというものです。 もしかしたらファイルを分けるにも何か設定が必要なのでしょうか? 私はただ[プロジェクト]→[プロジェクトに追加]→[新規作成]でソースファイルを作っているだけなんですが・・・ 上記の状態を回避する方法はあるのでしょうか?

  • 分割コンパイルの方法がわかりません‥(Studio.NET) →2

    先ほどはありがとうございました。 私の考え方が違っていたようで、 main.cpp で使っているグローバル変数をsub.cpp内で使いたい。 sub.cpp に記述している関数をmain.cppから呼び出したいときは どうしたらいいでしょうか? ヘッダファイルの書き方がわからないのです>< XPでStudio.NETでプログラミングしています。 よろしくお願いします><

  • ヘッダーファイルのインクルード

    VC++6.0です。 ヘッダーファイルをincludeしていいかどうかは どのように決まるのでしょうか? classは、appとhogeの1種類があるとして、 app.h、app.cppとhoge.cpp、hoge.hの4つのファイルがあるとします。 1)appによるhogeのメンバの操作があって、その逆は無い場合 2)hogeもappのメンバを操作する場合 のそれぞれで教えてください。 最初、私は、そのclass内で別のclassのメンバ関数を 呼ぼうと呼ぶまいとincludeしてもかまわないと思っていました。 しかし、自分の作ったプログラムを検討したところ 1)の場合で、hogeのヘッダーに #include "app.h"と入れるとエラーになります。 hogeのcppファイルに#include "app.h"と入れてもエラーになります。

  • 構造体と構造体型の変数宣言箇所

    はじめてborlandC++builder6でプログラムを作っているのですが、構造体と構造体型の変数宣言箇所についてわからないことがあるので質問させてください。 あるフォームのソースファイル(○○○.cpp)内の関数で、自分で定義した構造体を使う場合、ヘッダファイル(○○○.h)に構造体を定義すると、関数内で「変数が未定義」エラーになってしまいます。一方、ソースファイル(○○○.cpp)の先頭に書けばエラーになりません。  ヘッダファイルに変数定義した場合とソース内の先頭に構造体と構造体型変数を定義するのでは何が違ってくるのでしょうか?

  • ヘッダーファイルについて

    //DMusic7Ex.h あるプログラムを解析しています。 //コンパイラ設定 //多重定義防止 #pragma once //ファイルインクルード #include <dmusicc.h> #include <dmusici.h> //型定義 typedef IDirectMusicPerformance* LPDIRECTMUSICPERFORMANCE; typedef IDirectMusic* LPDIRECTMUSIC; typedef IDirectMusicLoader* LPDIRECTMUSICLOADER; typedef IDirectMusicSegment* LPDIRECTMUSICSEGMENT; //関数プロトタイプ 1・DMusic7Ex.cppを作らず他の関数で、このヘッダーファイルをインクルードする手法は一般的なのか? 2・なぜ関数プロトタイプを記述しないで、このタイプ宣言を他のファイルで使用するのは一般的なのか?

  • DirectX9.0SDK(2005August)でのcppファイルの追加について・・・

    こんばんは、このたびはDirectX9.0のSDK(2005August)をインストールし、早速開発しています。 そこで分からないことがあるので質問させていただきます。 大きなプログラムを作るときって、機能ごとにファイルに分けますよね。で、プログラムを分けるときって、~.cppと~.hをセットみたいに作りますよね? 普段はこれでプログラムの分割もできるのですが 今回、SDKについているCommonフォルダ内のファイルを使ったサンプルに、自分で作ったプログラムを追加していった結果、コンパイル時にcppファイルで必ず「プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。」というエラーが発生してしまいます。(なぜかメイン関数のあるcppファイルではそのエラーは出ないのですが・・・) この原因と解決法について、どなたかご存知でしたら回答をお願いいたしますm(_ _)m 分かりづらい質問ですみません^^;