• ベストアンサー

2つのcppファイルから

1つのexeファイルを作る必要性が出てきました。 (現在質問中の質問に関連しています。) 例えば file.cpp: #include<iostream> using namespace std; void Output(int x) { cout<<x<<endl; } void main(void) { for(int i=0;i<9;Output(i++)); } をコンパイルリンクすれば済むことを file1.cpp: #include<iostream> using namespace std; void Output(int x) { cout<<x<<endl; } file2.cpp: void main(void) { for(int i=0;i<9;Output(i++)); } という風に分かれているファイルをコンパイルリンクしなければならないのです。 cpp -e file.exe -c file1.cpp -c file2.cpp ではエラーになります。 どうすれば良いのでしょうか?

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

  • ベストアンサー
  • MovingWalk
  • ベストアンサー率43% (2233/5098)
回答No.1

Borland C++なら  bcc32 -efile.exe file1.cpp file2.cpp でfile.exeが生成されませんか?

keyguy
質問者

補足

ありがとうございます。 Borland C++ 5.5です。 c:\borland>bcc32 -efile0.exe file1.cpp file2.cpp file1.cpp: file2.cpp: エラー E2268 file2.cpp 3: 未定義の関数 'Output' を呼び出した(関数 main() ) *** 1 errors in Compile *** となるのです。 マイクロソフトのDirectXの1つのサンプルをコンパイルするために そのサンプルに使われているクラスメンバの定義が複数のCPPファイルに格納されていて 一緒にコンパイルしなければならないのです。

その他の回答 (3)

回答No.4

>c:\borland>bcc32 -efile0.exe file1.cpp file2.cpp >file1.cpp: >file2.cpp: >エラー E2268 file2.cpp 3: 未定義の関数 'Output' >を呼び出した(関数 main() ) >*** 1 errors in Compile *** file1_def.h : void void Output(int x); file1.c, file2.c : #include "file1_def.h"  DirectXを使うとかより、C言語の文法の勉強が先!ちゃんと必要なヘッダーファイルをインクルードしてください(← http://www.okweb.ne.jp/kotaeru.php3?q=689531 )。  SDKに「include」か「必要条件」か「ヘッダー」か「動作環境」の項目に書いてあるはずです。 例: IDirect3D8::CheckDepthStencilMatch 動作環境 ヘッダー : D3d8.h で宣言。 インポート ライブラリ : D3d8.lib を使用。 このインタフェースを使用するファイルでは、ファイルの先頭付近に #include <D3d8.h> が必要。また、リンクするには「D3d8.lib」を含めなければならない。

keyguy
質問者

補足

ありがとうございます。 下の補足と行き違えになったみたいです。

  • neKo_deux
  • ベストアンサー率44% (5541/12319)
回答No.3

file2.cppで使用するOutput関数を定義したヘッダファイルfile.hを作成するのが一般的なのでは? file.h:関数Outputの形式を定義 void Output(int x) ; file.cpp:関数Outputの処理内容を記述 #include"file.h"//file.hで定義されたOutputを使用、Outputの処理を記述することを宣言 #include<iostream> using namespace std; void Output(int x) { cout<<x<<endl; } file2.cpp #include"file.h"//file.hで定義されたOutputを使用、Outputの処理を記述することを宣言 void main(void) { for(int i=0;i<9;Output(i++)); }

keyguy
質問者

補足

ありがとうございます。 勿論この場合は file1.cpp: #include<iostream> using namespace std; void Output(int x) { cout<<x<<endl; } file2.cpp: #include"file1.cpp" <-----挿入 void main(void) { for(int i=0;i<9;Output(i++)); } として c:\borland>bcc32 file2 とすればコンパイルリンクは成功します。 しかしDirectXのサンプルをコンパイルするためにサンプルの中に多くの #include"?.cpp" を挿入しなければなりません。 マイクロソフトはそういうことを想定してサンプルを作ったのでしょうか?

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

makefileは?

keyguy
質問者

補足

ありがとうございます。 makeファイルをどのように記述すれば言いのでしょうか? 実は実際はDirectXのソースファイルであり数十個のファイルを一緒にコンパイルリンクしなければならないのです。 1つのサンプルをコンパイルリンクできれば良いのですが そのサンプルはSRCディレクトリ内の複数のCppファイルで定義されているいくつかのクラスメンバ関数を使っていて サンプルをコンパイルするためにそのサンプルとSRCディレクトリ内Cppファイルを一緒にコンパイルリンクしなければならないのです。

関連するQ&A