2016-04-01 5 views
1

Ich habe eine Klasse wieFehler LNK2019: nicht aufgelöstes externes Symbol „public: __thiscall

template <class T> 
     class LinkedListItem 
     { 
     public: 
      LinkedListItem(T value); 
      LinkedListItem(const LinkedListItem<T>& rhs); 
      T getValue(void); 
      LinkedListItem<T>& getNext(void); 
      void setNext(LinkedListItem<T>& next); 
      LinkedListItem<T>& operator=(const LinkedListItem<T>& rhs); 
      ~LinkedListItem(); 
     private: 
      T _value; 
      LinkedListItem& _next; 
     }; 

Ich versuche, einen Komponententest wie

TEST_CLASS(LinkedListUnitTests) 
{ 
public: 

    TEST_METHOD(Add_to_An_Empty_Linked_List) 
    { 
     LinkedListItem<int> item(1); 
    } 
//private: 

}; 

zu schreiben, wenn ich versuche, nur den oben genannten Code zu bauen Ich bekomme den hässlichen Fehler -

Fehler LNK2019: unaufgelöst externes Symbol "public: __thiscall cpp :: libraries :: Datenstrukturen :: LinkedListItem :: LinkedListItem (int)" (?? 0? $ LinkedListItem @ H @ Datenstrukturen @ Bibliotheken @ cpp @@ QAE @ H @Z) in Funktion referenziert "public: void __thiscall CppLibrariesTests :: LinkedListUnitTests :: Add_to_An_Empty_Linked_List (void)"? (Add_to_An_Empty_Linked_List @ LinkedListUnitTests @ CppLibrariesTests @@ QAEXXZ)

Ich bin mit Visual Studio 2012

Interessanterweise Wenn ich eine Vorlage in der Unit-Test-Klasse wie unten hinzufügen, verschwindet der Kompilierungsfehler, aber die Tests werden nicht erkannt und ich kann sie nicht ausführen.

template<class T> 
TEST_CLASS(LinkedListUnitTests){..} 

Ich versuche, etwas sehr dumm tue abholen C++ nach langer Zeit so wird es mich nicht überraschen, wenn ich. Irgendwelche Gedanken irgendjemand?

+2

Mögliches Duplikat [Warum Templates kann nur in der Header-Datei implementiert werden?] (Http://stackoverflow.com/questions/495021/why-can-templates-only-be-implemented-in -Die Header-Datei). –

Antwort

1

Vorlagen müssen idealerweise inline implementiert werden. Der zweite Durchlauf des Compilers kann die CPP-Datei, die die Implementierung aufweist, nicht erneut verwenden. Oder Sie müssen # die CPP Datei auch einschließen.

Refer this article

Verwandte Themen