質問: 他の.cppファイルに定義した関数を呼び出す方法について 新規作成したプロジェクトに、 以前自分が作成した.cppファイルと.hファイルを そのまま使えないかと考えています。 (※仮にそのファイルの名前を "define.cpp" "define.h" とします) プロジェクトに新規ファイル main.cpp を作成して、 define.hをインクルードし、 以下のようなテストのプログラムを組みました。 ・../util/define.cpp---------------------- #include #include "define.h" void test(){ std::cout<<"test."< lnk2019: 未解決の外部シンボル "void __cdecl test(void)" が関数 _main で参照されました visualc++で「既存項目の追加」という項目より、 実体の定義されたdefine.cppをプロジェクトに追加していないため 当然といえば当然なのですが・・・ c言語でいうところの等みたいに、 わざわざプロジェクトにcppファイルを追加しなくても 関数を呼び出せるようには出来ないのでしょうか? 全ての関数と処理をヘッダーファイルに記述すると解決ですが 物凄く見辛いのでそれは避けたいのです。 また、色々なpc間で使っているため(学校のpcなので)、 ツール自体のプロパティを弄らない方法があるのでしたら、 多少面倒でもそちらの方が好ましいです。 追加する方法があるかどうか、 あればその方法をご存じでしたら教えていただければ嬉しいです。 よろしくお願いします。
回答: 「プロジェクトにソースファイル(*.cpp)を追加」すればよい。 今のプロジェクトは「main.cppだけしか無い」と思ってる。 なので、main.exeを作ろうとして main.cppをコンパイル ↓ main.objをリンク ↓ main.exeを作る って事をする。すると「test()の実体がどこにも無い」って言われる。 なので、プロジェクトにソースを追加して main.cppと ../util/define.cppをコンパイル ↓ main.objと ../util/define.objをリンク ↓ main.exeを作る って言う感じにしないとならない。 それが面倒なら main.cpp---------------------------- #include "../util/define.cpp" int main(){ test(); return 0; } って書いてもok。(インクルードパスに../utilが足してあるなら) 誰も「インクルードしていいのは*.hだけ」とは決めてないので「過去に作ったソースファイルを丸ごとインクルードして使う」のもアリなのだ。 かなり強引で邪道だけどね。