0

このブログCubicは、4つのことを試してから、多かれ少なかれ助けを求めることを提案しました

  • 再構築、チェック
  • ランタイム ライブラリを確認します。プロジェクトは 1 つだけです
  • エントリポイントを確認し、SUBSYSTEM:CONSULE を確認してください
  • 強制的に含まれている .lib ファイルを確認してください。#pragma comment(lib, ...) が表示されません。
  • リンカ オプションで /VERBOSE をオンにすると、オプションが表示されません

コードをいくつか投稿しますが、これは LNK エラーです。それは多くの情報を提供しません。

  • LNK2005: "class std::vector,class std::allocator >,class std::allocator,class std::allocator > > >,class std::allocator,class std::allocator >,class std::allocator, class std::allocator > > > > > list1" (?list1@@3V?$vector@V?$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@@V?$allocator@ V?$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@@@2@@std@@A) msproject.obj で既に定義されています
  • LNK2005: "class std::vector,class std::allocator >,class std::allocator,class std::allocator > > >,class std::allocator,class std::allocator >,class std::allocator, class std::allocator > > > > > list1" (?list1@@3V?$vector@V?$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@@V?$allocator@ V?$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@@@2@@std@@A) msproject.obj で既に定義されています

msproject で既に定義されているベクトルに関するものであることがわかります。ベクトルの名前が異なることを確認しました。これはヘッダー付きのものですか# include <vector>?チェックする #includes の一部をコメントアウトしてみましたが、同じです。

4

2 に答える 2

2

list1複数回定義しているようです。(ところで、名前はそれがであるべきであることを示唆していますがstd::list、それは質問の範囲を超えています)

ありますか

std::vector<std::string> list1;

ヘッダーファイルに?そのヘッダーは複数の翻訳単位に含まれていますか?

グローバルが必要な場合externは、ヘッダーで使用する必要があります。

extern std::vector<std::string> list1;

定義を単一の実装ファイルに移動します。

于 2012-07-25T21:01:07.137 に答える
1

list1 を複数回定義しました。おそらくそれをヘッダーファイルに入れ、それを複数のcppファイルに含めました。これはあなたがそれを行うべき方法です

// in header file
extern std:vector<whatever> list1;

// in one cpp file
std:vector<whatever> list1;

あなたの知識のギャップは、複数のソースファイルを持つプログラムでグローバル変数を宣言および定義する方法を知らない/理解していないことです。C++ に関する適切な入門書であれば、これをカバーしているはずです。

于 2012-07-25T21:13:08.543 に答える