2009-04-07 10 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 

Erhalte diesen Fehler und andere mit IndexList-Implementierung. Ich habe alle richtigen Dateien aufgenommen, nicht sicher, was das bedeutet?Verknüpfungsfehler in C++ - Implementieren einer Indexliste

indexList.h
indexList.cpp

Auch mit VS .NET 2003 - Sie sind unter den „Quelldateien“ und „Header-Dateien“ Allerdings habe ich getestet, mit dem indexLish.h Löschen und der Fehler nicht ändert ?

Antwort

2

Was Sie haben, ist eine Klassenvorlage. Das bedeutet, wenn der Compiler eine Funktion aufrufen muss, sucht er nach Ihrer Template-Definition und generiert den entsprechenden Code nach Bedarf.

Zum Beispiel die folgenden wahrscheinlich hat einen Fehler bei der Kompilierung in ihm, wenn versucht, es zu nennen:

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

Aber solange man nicht doSomething nennt du nicht Fehler bekommen.

Das Problem, das Sie haben, ist, dass Ihre Header-Datei den Compiler "Hey, diese Funktionen existieren", aber wenn der Compiler versucht, sie zu generieren, kann es keine Definitionen finden. (Sie können Definitionen in einer Quelldatei nicht "kompilieren", sie müssen für den Aufrufer sichtbar sein.)

Die gängigste Lösung besteht darin, einfach die gesamte Klassenvorlage in der Datei .h oder .hpp zu definieren.

1

Verwenden Sie Visual Studio dann fügen Sie beide Dateien in die Lösung und dann ausführen.

+0

VS .NET 2003 - Sie sind unter den "Quelldateien" und "Header-Dateien" Allerdings habe ich mit dem Löschen der indexLish.h getestet und der Fehler ändert sich nicht? –

+0

Sie haben in cpp die read-Methode zweimal definiert? template Leer Indexlist :: read (istream & In) template Leer Indexlist :: read (istream & In) – Vinay

+0

Zuerst ein Kommentar gesetzt. –

1

Da Sie Vorlagen verwenden, ist der beste Weg, die Definition in .H-Datei aufzunehmen.

Ich lese etwas aus diesem book. Und hier ist something es kann Ihnen auch helfen.

Verwandte Themen