0

エラー LNK2019: unresolved external symbol problem が発生しました。

2 つのファイルがあり、それらを共有の場所に移動して、2 つの異なるプロジェクトがクラスを使用できるようにします。他にもこのようなクラスがあります。

問題は、プロジェクトの1つのメインからクラスを呼び出すと、取得することです

error LNK2019: unresolved external symbol "public: __thiscall CProcessCommandLine::~CProcessCommandLine(void)" (??1CProcessCommandLine@@QAE@XZ) referenced in function _main
error LNK2019: unresolved external symbol "public: bool __thiscall CProcessCommandLine::Wait(void)const " (?Wait@CProcessCommandLine@@QBE_NXZ) referenced in function _main
error LNK2019: unresolved external symbol "public: class std::vector<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > const & __thiscall CProcessCommandLine::getTargetNamesVect(void)" (?getTargetNamesVect@CProcessCommandLine@@QAEABV?$vector@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@@std@@XZ) referenced in function _main
error LNK2019: unresolved external symbol "public: __thiscall CProcessCommandLine::CProcessCommandLine(void)" (??0CProcessCommandLine@@QAE@XZ) referenced in function _main

ヘッダー ファイルを開いて関数の 1 つを右クリックし、定義に移動すると、.cpp の定義に移動しません。.cpp の関数を右クリックして定義に移動すると、「シンボルが定義されていません」と表示されます。

なぜこれが起こっているのか誰にも分かりますか?.h と .cpp の両方が同じ場所にあり、その場所はプロジェクトの追加のインクルード ディレクトリにあります。

編集:

次のコードは、このフォルダー内の他のファイルに存在します。

#ifdef PROJ1
#include "class1.h"
#elif PROJ2
#include "class2.h"
#endif

私は前にこれらのことを見たことがありません。それらはコードで使用されますが、使用されるプロジェクトに応じて正しいヘッダーを含めるためだけに使用されます。上記は、このフォルダー内の他のクラスの .cpp にあります。なのでここに入れました。しかし、他のクラスでは、それが属していないプロジェクトはグレー表示されています。.h に入れると、正しいヘッダーがグレー表示されます。しかし、何らかの理由で、この .cpp はプロジェクトの一部として認識されていません。

4

1 に答える 1

0

関数が構築中のモジュールとは異なるモジュールに属している場合は、クラスをエクスポートする必要があります。

#ifdef THIRD_MODULE
#define DLLIMPEXP _declspec(dllexport)
#else
#define DLLIMPEXP _declspec(dllimport)
#endif

class DLLIMPEXP CProcessCommandLine
{
   //...
};

このクラスを定義済みで定義するプロジェクトをビルドしますTHIRD_MODULE

このプロジェクトは.libファイルを生成します。このファイルは、メイン プロジェクトのリンカー設定で追加の依存関係に追加する必要があります。

于 2012-04-17T12:37:14.460 に答える