1

次のエラーが意味することを誰か教えてもらえますか?

エラー 2 エラー LNK2019: 未解決の外部シンボル "public: class TLst & __thiscall TLst::operator=(class TLst const &)" (??4?$TLst@VTInt@@@@QAEAAV0@ABV0@@Z) 関数で参照されています"public: void __thiscall TPair >::GetVal(class TInt &,class TLst &)const " (?GetVal@?$TPair@VTInt@@V?$TLst@VTInt@@@@@@QBEXAAVTInt@@AAV?$ TLst@VTInt@@@@@Z) randomgraph.obj ランダムグラフ

4

3 に答える 3

4

一般に、これはリンカーがシンボルへの参照を認識しているが、どこにも見つからないことを意味します。多くの場合、ライブラリまたはオブジェクト ファイルが見つからないことが原因です。

この場合、これは、テンプレート化されたクラスのメンバー関数を .cpp ファイルに実装したために発生しました。それらはヘッダーに実装する必要があります。

テンプレート クラスは、クラスではなくテンプレートです。たとえば、コンパイラが使用していることを確認すると、テンプレートからvector<int> f;新しいクラスが作成されます。たとえば、作成するには、テンプレートがインスタンス化される時点での実装を確認する必要があります。実装がヘッダー ファイルにない場合は、それを行うことができません。vector<int>vectorvector<int>::size()size()size()

vector明示的にインスタンス化することでこれを回避できますint- その後、コンパイラは cpp ファイルをコンパイルするときに明示的なインスタンス化を確認します。これは、テンプレートを持つ目的を無効にします。明示的なインスタンス化で事前定義した型に対してのみ使用できます。したがって、短い話ですが、常にヘッダー ファイルにテンプレートを完全に実装してください。

于 2011-03-13T22:02:54.883 に答える
1

Unresolved external symbolリンカが見つけられない参照があることを意味します。これは通常、オブジェクト ファイルまたはライブラリをリンク ステップに追加するのを忘れたために発生します。(クラスのヘッダー ファイルをインクルードするだけでは十分ではありません。実装コードも追加する必要があります。)

于 2011-03-13T22:02:21.847 に答える
0

この問題は解決されました。テンプレート クラス TLst では、関数

TLst TLst::operator=(const TLst&);

宣言されましたが、定義されていませんでした。

.cpp ファイルで関数を定義する必要がありました。ヘッダーファイルでも定義できました。

返信ありがとうございます。

ソムナス

于 2011-03-15T04:10:58.380 に答える