2009-04-07 6 views
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> > &)" ([email protected][email protected]@@[email protected]@@[email protected][email protected]@[email protected]@@[email protected]@@Z) referenced in function _main 

このエラーおよび他のindexListの実装の取得。私はすべての適切なファイルを含んでいますが、これが何を意味するのか分かりません。C++でのリンクエラー - indexListの実装

indexList.h
indexList.cpp

また、VS .NET 2003を使用して - 彼らは、「ソースファイル」と「ヘッダファイル」の下にあるしかし、私はindexLish.hの削除でテストされ、エラーは変更されません。 ?

答えて

2

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

例えば、それを呼び出すようにしようとした場合おそらく次はそれでコンパイル時エラーがあります。

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

しかし、限り、あなたはdoSomethingを呼び出さないよう、あなたはエラーを取得することはできません。

あなたの問題は、ヘッダーファイルがコンパイラに「これらの関数があります」と伝えることですが、コンパイラがそれらを生成しようとすると、定義を見つけることができません。

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

1

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

+0

VS .NET 2003 - "ソースファイル"と "ヘッダーファイル"の下にありますが、私はindexLish.hを削除してテストしましたが、エラーは変わらないのですか? –

+0

cppでreadメソッドを2回定義していますか? <クラスT、int型maxSizeの> 無効indexList テンプレート::読む(はistream&イン) テンプレート<クラスT、int型maxSizeの> 無効indexList ::読む(はistream&イン)コメントアウト – Vinay

+0

まず1。 –

1

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

私はこれをbookから読みました。そしてここにはsomethingがあります。