
新規作成したプロジェクトに、
以前自分が作成した.cppファイルと.hファイルを
そのまま使えないかと考えています。
(※仮にそのファイルの名前を "define.cpp" "define.h" とします)
プロジェクトに新規ファイル main.cpp を作成して、
define.hをインクルードし、
以下のようなテストのプログラムを組みました。
・../util/define.cpp----------------------
#include <iostream>
#include "define.h"
void test(){ std::cout<<"test."<<std::endl; }
・../util/define.h------------------------
#pragma once
void test();
・main.cpp----------------------------
#include "../util/define.h"
int main(){
test();
return 0;
}
上記のソースを VisualC++7.0 でビルドすると、
main.cppの3行目で以下のようなエラーが出ました。
> LNK2019: 未解決の外部シンボル "void __cdecl test(void)" が関数 _main で参照されました
VisualC++で「既存項目の追加」という項目より、
実体の定義されたdefine.cppをプロジェクトに追加していないため
当然といえば当然なのですが・・・
C言語でいうところの<stdio.h>等みたいに、
わざわざプロジェクトにCPPファイルを追加しなくても
関数を呼び出せるようには出来ないのでしょうか?
全ての関数と処理をヘッダーファイルに記述すると解決ですが
物凄く見辛いのでそれは避けたいのです。
また、色々なPC間で使っているため(学校のPCなので)、
ツール自体のプロパティを弄らない方法があるのでしたら、
多少面倒でもそちらの方が好ましいです。
追加する方法があるかどうか、
あればその方法をご存じでしたら教えていただければ嬉しいです。
よろしくお願いします。
No.2ベストアンサー
- 回答日時:
「プロジェクトにソースファイル(*.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だけ」とは決めてないので「過去に作ったソースファイルを丸ごとインクルードして使う」のもアリなのだ。
かなり強引で邪道だけどね。
試してみたところ上手くいったようです!
私自身まだまだ駆け出しの初心者なので、
C++のファイルや.hファイル以外は、
読み込めないものと思っていました。
まさに固定概念を打ち破る方法ですね・・・。
確かに多少強引ではありますが。
色んな意味で勉強になりました。
返答ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
教えて!goo限定!! 電子コミック1000円分ギフトコードプレゼント!!
抽選で1000名様に電子コミック1000円分ギフトコードプレゼント!!
-
c++,ある関数のクラスから別のクラスの関数を呼ぶ
C言語・C++・C#
-
DWORDの実際の型は何でしょうか
C言語・C++・C#
-
同じソリューション内の別のプロジェクトのメソッド呼び出し
C言語・C++・C#
-
4
関数から配列を返すには?
C言語・C++・C#
-
5
【VS2008 C++】2つのプロジェクト間で共通の関数を使いたい
C言語・C++・C#
-
6
Enterキーを押されたら次の処理に移るという事をしたい。
C言語・C++・C#
-
7
1 つ以上の複数回定義されているシンボルが見つかりました
C言語・C++・C#
-
8
LINK : fatal error LNK1104について
C言語・C++・C#
-
9
別ファイルの構造体の値を読み込む、変えるには?2
C言語・C++・C#
-
10
LPCWSTRとchar
C言語・C++・C#
-
11
C言語で分割ファイル先の関数を呼び出す時
C言語・C++・C#
-
12
VC++から引数付きexeファイルの実行
C言語・C++・C#
-
13
コンボボックスの値がうまく取得出来ません。
C言語・C++・C#
-
14
左側がクラス、構造体、共用体、ジェネリック型への
C言語・C++・C#
-
15
静的でないメンバ関数の呼び出しが正しくありません
C言語・C++・C#
-
16
変数名の付け方
Java
-
17
複数桁10進数の*桁目だけを抽出したい
C言語・C++・C#
-
18
C言語 配列の長さの上限
C言語・C++・C#
-
19
多重定義が起きている?--lnk2005エラー:VC++
C言語・C++・C#
-
20
Debug Assertion Failed?
C言語・C++・C#
関連するQ&A
- 1 Visual Studio 2008で新規プロジェクトでのCppファイ
- 2 他のプロジェクトの関数にライブラリファイルを作る以外にアクセスする方法はありますか?
- 3 VS2017の環境で、MFCでDLLのプロジェクトにあるcppファイルに、 #include <di
- 4 C++:ある関数を定義するときに別の関数を用いて定義はできないのですか。
- 5 プロジェクトの新規作成
- 6 Visual Studio2015 でWin32の新規プロジェクトを作成すると発生するエラー
- 7 プロジェクト新規作成
- 8 他プロジェクトのFormを自プロジェクトにコピーしてもうまく働かない
- 9 ConsoleApplicationから別プロジェクトのメソッド呼び出
- 10 Visual C++ Express Edition 2008 での新規プロジェクト作成ができない
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
人気Q&Aランキング
-
4
sys/ipc.h や sys/shm.h
-
5
他の.CPPファイルに定義した関...
-
6
Visual SourceSafe 6.0cは、VS2...
-
7
コンパイルするときに、ファイ...
-
8
MASMでexe作成
-
9
エラーの原因は?「この関数の...
-
10
Visual Stadio2008 Releaseビル...
-
11
VB.NETでActiveX(OCXファイル)作成
-
12
一番長い、プログラミングのソ...
-
13
ACCESSのEXEを作るのは可能...
-
14
Wingdi.h Windows.h を開くには?
-
15
【C#】exeファイルに複数アイコ...
-
16
*.bsc *.exp??
-
17
プロジェクトフォルダ名の変更...
-
18
ソースから参照しているOCXの一...
-
19
パイプで標準出力を隣のコマン...
-
20
C言語初心者の質問失礼します。
おすすめ情報