1

リンクエラーが発生しましたが、何を指しているのかわかりません。

これがエラーです

1> Main.obj:エラーLNK2019:未解決の外部シンボル "public:void __thiscall BinaryHeap、class std :: allocator >>、class Comp、class std :: allocator >> >> :: insert(class Item、class std :: allocator >> const&) "(?insert @?$ BinaryHeap @ V?$ Item @ V?$ basic_string @ DU?$ char_traits @ D @ std @@ V?$ allocator @ D @ 2 @@ std @@@@ V ?$ Comp @ V?$ basic_string @ DU?$ char_traits @ D @ std @@ V?$ allocator @ D @ 2 @@ std @@@@@@ QAEXABV?$ Item @ V?$ basic_string @ DU?$ char_traits @ D @ std @@ V?$ allocator @ D @ 2 @@ std @@@@@ Z)関数 "public:void __thiscall PriorityQueue、class std :: allocator >> :: insertItem(int、class std: :basic_string、class std :: allocator> const&) "(?insertItem @?$ PriorityQueue @ V?$ basic_string @ DU?$ char_traits @ D @ std @@ V?$ allocator @ D @ 2 @@ std @@@ @QAEXHABV?$ basic_string @ DU?$ char_traits @ D @ std @@ V?$ allocator @ D @ 2 @@ std @@@ Z)

コードはかなり長いですが、投稿してほしい場合は投稿します。

ありがとう

4

3 に答える 3

5

テンプレート関数ですBinaryHeap<T, Comp>::insert(T const &)。MSVC コンパイラは、エクスポート可能なテンプレートをサポートしていません (ほとんどサポートしていません)。.cpp ファイルではなく、ヘッダー ファイルでこの関数を定義した (宣言しただけではない) ことを確認してください。

于 2010-04-18T02:31:23.250 に答える
3

呼び出していると言っていますBinaryHeap::insertが、その関数の実装がリンクされていません。ヘッダーファイルが必要です。そうしないと、宣言されていない関数を呼び出そうとしたときにコンパイラが失敗します。BinaryHeap ライブラリをリンクするのを忘れましたか?

于 2010-04-18T02:17:15.007 に答える
2

テンプレート化された BinaryHeap クラスを定義しようとしていますか? .h ファイルで挿入メソッドを宣言し、.cc ファイルで定義していますか?

これは、ほとんどのコンパイラでは機能しません。リンク時だけでなくコンパイル時にも利用できるように、テンプレート関数を定義する必要があります。関数定義をヘッダー ファイルに移動します。

于 2010-04-18T02:30:58.063 に答える