- ベストアンサー
一つのソースユニットを複数のプロジェクトで共有したい
BCB5を使っています。 複数のプログラムで共通な関数について、それらのプログラムで共有できるソースユニットを作ることが出来たら便利だと思っていますが、そんなことは可能でしょうか? 今三つのプログラム(A.exe、B.exe、C.exe)があるとします。 これらのプログラムの一部には、全く同じ処理があります。 それを関数Zf()とします。 で、Z.cppというユニットにこの関数を記述し、三つのプロジェクトで共有するのです。 この関数は仕様が完全に決まってはおらず、試行錯誤しながら決めて行くことになっています。 修正が多発するのですが、Z.cppを一つ修正すれば、再コンパイルだけで反映するので便利だ、という考えです。 私の知識では、一つのプロジェクトに新たなソースユニットを作る場合、そのユニットでは、呼ぶ側のヘッダーをincludeする必要があります。 今回の場合は、Z.cppは三つのプロジェクトに登録するわけですから、三つのヘッダーをincludeすることになってしまいます。 A.hとB.hを見ると同じ名前の変数や関数があり、これを同時にincludeするとマズイ事になりそうな気がします。 呼ぶ側のヘッダーをincludeせずに共有することは可能なのでしょうか? ちなみに関数Zf()では、グローバル変数は使っていませんし、他のユーザ関数を呼ぶこともありません。 シロートの質問ですがよろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (2)
- redfox63
- ベストアンサー率71% (1325/1856)
回答No.3
- shippo_ppk
- ベストアンサー率51% (28/54)
回答No.1
お礼
php504さん、ありがとうございます。 Z.cppでは、 int TForm1::Zf(char *txt){ 略 } と記述しています。 呼ぶ側のヘッダーをincludeしないと、コンパイラーからは「 E2090 型限定子 'TForm1' がクラス名または名前空間名ではない」というエラーが返されます。 そこで、呼ぶ側のヘッダーをincludeしています。 私のソースは何かが違うのですね?
補足
php504さん、ありがとうございました。 落ち着いてもう一度php504さんのコメントを読み直し、いろいろ試してみました。 結果としてphp504さんのおっしゃることが正しい、という結論になりました。 私はかなり誤解をした記述をしていたようです。 私の誤った記述は次のとおりです。 呼ばれるソースでの関数の記述(すでに書いてありますが)は、 int TForm1::Zf(char *txt){ 略 } です。 この関数の宣言は呼ぶ側のソースのヘッダーで行っていました。 呼ばれる側のソースのヘッダーには何も記述されていない状態です。 そこで、呼ばれるソースでは、 int Zf(char *txt){ 略 } とし、そのヘッダーにこの関数を宣言する。 呼ぶソースでは、php504さんのおっしゃる通り呼ばれるソースのヘッダーをincludeする。 これでコンパイルも通り、狙い通りのプログラムにすることが出来ました。 テストとして、別のプログラムを作り、この関数を書いたソースユニットをプロジェクトに追加して試したところ、正常に動きました。 本当にありがとうございました。