• 締切済み

C++のファイルの分割について教えてください。

分割したプログラムの書き方を練習中なのですが、 下のようなプログラムを書いて、ビルドしようとしたら失敗します。 どこが悪いのか、教えていただけないでしょうか? (5)\test30\Debug\test30.exe : fatal error LNK1120: 外部参照 1 が未解決です。 1>test30 - エラー 2、警告 0 ========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ========== //test30.cpp #include <iostream> #include "sub.h" int main(void) { std::cout<<"メインプログラムです。"<<std::endl; sub1(); sub2(); return 0; } ------------------------------------------------------------- //sub1.cpp #include <iostream> void sub1(void) { std::cout<<"サブ1です。"<<std::endl; } ------------------------------------------------------------- //sub2.cpp #include <iostream> void sub1(void) { std::cout<<"サブ2です。"<<std::endl; } --------------------------------------------------------------- //sub.h void sub1(void); void sub2(void);

みんなの回答

  • infeeld
  • ベストアンサー率37% (3/8)
回答No.3

test30.cppのみがコンパイルされ、sub1.cppとsub2.cppがコンパイルされていないようです。 test30.cppは、sub.hによって関数が宣言されているので、sub1、sub2の関数がとりあえずあるという前提でコンパイルされます。 コンパイルが終わったら、リンクにてとりあえずで先延ばしにしていた問題を解決するため、sub1の呼び出し部分を実際のsub1とを紐付けようとします。 しかし、肝心のsub1の関数が見つからずエラーとなった。 と推測します。 sub2も同様です。 sub1.cppとsub2.cppがコンパイル対象になっているかをご確認ください。

ForceFeed
質問者

補足

Visual C++ 2008 Express Editionの無料のダウンロード版使ってるのですが、最初の新規ファイルを作っていくウィザードで、アプリケーションの設定をWindowsアプリケーションにしていために、駄目だったようです。 コンソールアプリケーションでやり直してみたら、うまくいきました。 皆さん、ご迷惑おかけしました。

  • BLK314
  • ベストアンサー率55% (84/152)
回答No.2

VS2008 proで実験しましたが(ファイル名も全部そのまま)、 特に問題ありませんでした。ビルドできました。 基本的なことですが プロジェクトのソースファイルに にsub1.cpp,sub2.cpp,test30.cppは全部含まれていますか?

ForceFeed
質問者

補足

はい。ソースファイルのフォルダにsub1.cpp,sub2.cpp,test30.cpp ヘッダフォルダには、sub.hと分けていれてあります。

noname#208124
noname#208124
回答No.1

それが間違いなくソースと同じなら「どっちもsub1じゃん」でファイナルアンサー

ForceFeed
質問者

補足

sub2.cppのところは書き間違いました。 今、確認してビルドして見ましたが、同じエラーがでます。

関連するQ&A