2

アプリケーションをビルドしようとすると、リンカーは次のようなエラーを大量に発生させます。

modlauch.obj:エラーLNK2005: "public:virtual __thiscall lolbutton ::〜lolbutton(void)"(?? 1lolbutton @@ UAE @ XZ)はすでにlolbutton.objで定義されています

コンパイラの設定ミスと関係があるのではないかと思いますが、修正方法がわかりません。私のクラスは一度しか含まれていないので、コードとは何の関係もないと思います。プロジェクトの再構築とクリーニングを試みましたが、役に立ちませんでした。

誰かがこの問題の解決策を提案できますか?私のプラットフォームはWin32(C ++)で、 MFCを使用しています。

4

4 に答える 4

4

次のようにクラスを作成すると、リンカーエラーが発生します。

lolbutton.h:

class lolbutton {
public:
  virtual ~lolbutton();
};

lolbutton::~lolbutton() {
  // something...
}

あなたがそれをこのように書くとき、あなたはそれを手に入れません:

class lolbutton {
public:
  virtual ~lolbutton()
  { 
     // inlined something...
  }
};

デストラクタ定義を.hファイルから.cppファイルに移動して、リンカエラーを修正します。これにより、デストラクタの定義が1つだけになります。

于 2010-02-17T14:27:09.623 に答える
2

万が一、lolbutton.hファイルを複数回含めますか?そのようです:

//file: something.h
#include <lolbutton.h>
//... do code

//file: something_other.h
#include <lolbutton.h>

//file: main.cpp
#include <something.h>
#include <something_other.h>
于 2010-02-17T12:31:39.617 に答える
1

推測では、コードを見ずに、たまたまlolbuttonのデストラクタを宣言せずにヘッダーに配置しましたinlineか?あなたの説明から、これは、複数の変換ユニットにデストラクタのインスタンスが存在することになった場合の原因である可能性があります。

于 2010-02-17T12:29:37.630 に答える
0

lolbutton.hの複数のインクルードを使用するので、コンテンツを「if!defined someUUID」ブロックでラップすることについての私のコメント、またはプリコンパイル済みヘッダーの使用に関係している可能性があります。

于 2010-02-17T13:09:03.027 に答える