2013-07-09 67 views
8

この関数は、one.cppというファイルにDoThis(const char * abc)という名前の関数があります。だから私は別のソースファイル(two.cpp)内の別の関数からこの関数を呼び出そうとすると、私はエラーが発生します:エラーLNK2001:#include "one.h"を使用したにもかかわらず、未解決の外部シンボル(C++)私はこれを修正するのですか?エラーLNK2001:未解決の外部シンボル(C++)

+0

one.hでも定義されていますか? – Enigma

+0

関数DoThisはヘッダーで定義されています。 – user2549990

+0

はどちらもプロジェクトにリンクされているファイルですか? – Enigma

答えて

11

これは、関数の定義がプログラムに存在しないことを意味します。プログラムにone.cppを追加するのを忘れました。

「追加する」とは、この場合、ビルド環境とその用語によって異なります。 MSVCでは(明らかにMSVCを使用しているので)one.cppをプロジェクトに追加する必要があります。

より具体的には、すべての一般的なビルド方法に適用できます。プログラムをリンクすると、one.cppというオブジェクトファイルが作成されません。

+0

しかし、もし私のファイルがヘッダーのみのファイルだとすると、それは抽象クラスですか?残念ながら古い投稿を掘り下げてください:) –

+0

@Niklas Vest:ヘッダにすべてがあれば、コンパイラ/リンカは問題なくすべてを見つけることができます。私。 LNK2001は単に発生しません。ヘッダーファイルに不適切なものを配置すると、通常、スペクトルの反対側にあるLNK2005のリスクが高くなります。定義が多すぎます。 – AnT

3

Microsoft Visual C++を使用しているような音です。その場合、最も可能性の高いことは、two.cppをone.cppでコンパイルしないということです(one.cppはone.hの実装です)。

コマンドライン(CMD.EXE)からある場合は、最初にこれを試してみてください。 CL -o two.exe one.cpp two.cpp

あなたがIDEからであれば、右プロジェクト名をクリックしてくださいソリューションエクスプローラからAddを選択すると、 Existing Item ....プロジェクトにone.cppを追加します。

関連する問題