0
Linking... 
Directory.obj : error LNK2019: unresolved external symbol "public: void __thiscall indexList<class entry,100>::read(class std::basic_istream<char,struct std::char_traits<char> > &)" (?read@?$indexList@Ventry@@$0GE@@@QAEXAAV?$basic_istream@DU?$char_traits@D@std@@@std@@@Z) referenced in function _main

このエラーと indexList 実装に関連するその他のエラーを取得しています。正しいファイルをすべて含めましたが、これが何を意味するのかわかりませんか?

indexList.h
indexList.cpp

また、VS .NET 2003 を使用 - 「ソース ファイル」と「ヘッダー ファイル」の下にありますが、indexLish.h を削除してテストしましたが、エラーは変わりませんか?

4

3 に答える 3

2

あなたが持っているのはクラステンプレートです。これは、コンパイラが関数を呼び出す必要がある場合、テンプレート定義を調べて、必要に応じて対応するコードを生成することを意味します。

たとえば、次のコードを呼び出そうとすると、コンパイル エラーが発生する可能性があります。

template <typename T>
void doSomething(const T& x) {
    x->_this_function_does_not_exist_ever_();
}

ただし、呼び出さない限り、doSomethingエラーは発生しません。

あなたが抱えている問題は、ヘッダーファイルがコンパイラに「ねえ、これらの関数が存在する」と伝えているが、コンパイラがそれらを生成しようとすると、定義が見つからないことです。(ソース ファイル内の定義を「コンパイル」してリンクすることはできません。呼び出し元に表示されている必要があります。)

最も一般的な解決策は、.hまたは.hppファイルでクラス テンプレート全体を単純に定義することです。

于 2009-04-07T01:12:23.927 に答える
1

Visual Studio を使用している場合は、両方のファイルをソリューションに含めて実行します。

于 2009-04-07T01:07:19.460 に答える
1

テンプレートを使用しているため、.H ファイルに定義を含めるのが最善の方法です。

私はこの本から何かを読みました。そして、これがあなたにも役立つかもしれないものです。

于 2009-04-07T01:08:13.170 に答える