Verweis auf nicht aufgelöstes externes Symbol
-
Halloo.
Ich hab beim Compilieren ein paar Fehlermeldungen, wo ich nicht weiß, was ich damit anfangen soll.
Fehler 4 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: __thiscall Stack<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >::Stack<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >(void)" (??0?basic_string@DU?allocator@D@2@@std@@@@QAE@XZ)" in Funktion "_main".
Die anderen sind auch so ähnlich.
Hier mein Quellcode:
//main #include "stack.h" #include <string> using namespace std; int main() { try { Stack<string> s; string a = "A"; string b = "B"; string c = "C"; string d = "D"; string e = "E"; s.push(a); s.push(b); s.push(c); s.push(d); s.push(e); for (int i = 0; i < 6; i++) { cout << s.pop() << endl; } } catch (exception const& ex) { cerr << "Exceptoin: " << ex.what() << endl; } system("pause"); return 0; }#include "stack.h" //Konstruktor template <class T> Stack<T>::Stack() { numElems = 0; size = 5; elems = new T [size]; } //Destruktor template <class T> Stack<T>::~Stack() { delete [] elems; } //push template <class T> void Stack<T>::push (T& x) { if (size <=numElems) { T* tmp = elems; size *= 2; elems = new T [size] for (int i = 0; i < numElems; i++) { elems[i] = tmp[i]; } delete [] tmp; } elems[numElems++] = x; } //pop template <class T> T Stack<T>::pop() { if (numElems == 0) { cerr << "Stack leer!" << endl; exit (1); } return elems[--numElems]; } //isEmpty template <class T> bool Stack<T>::isEmpty() const { if ( elems == NULL) { return true; } return false; } //isFull template <class T> bool Stack<T>::isFull() const { if (numElems < size) { return true; } else { return false; } }#ifndef stack_h #define stack_h #include <iostream> #include <exception> using namespace std; template <class T> class Stack { public: Stack(); ~Stack(); void push(T &); T pop(); bool isEmpty() const; bool isFull() const; private: int size, numElems; T *elems; }; #endifNach 2 Stunden Fehlersuche, weiß ich nicht, wo ich weiter machen soll.
Vielleicht hat jemand einen Rat?!
Danke
-
http://www.c-plusplus.net/forum/151578
edit: Da ich den nächsten Fehler schon voraus sehe:
Google: C++ Regel der großen Drei
-
Danke, 5. hat geholfen.
Allerdings muss ich da nochmal nachfragen.
Ich hatte mir ein Skript zur Hilfe genommen, wo die Template-Klassen im Header deklariert wurden, aber in einer cpp Datei implementiert wurden.Muss ich immer alles in den Header packen, oder funktioniert das auch "extern" in einer cpp?
-
Es gibt einen einzigen exotischen Compiler, der externe Templatedefinitionen kennt. Wenn dein Script das anders macht, dann hast entweder du etwas an der Stelle falsch verstanden oder das Script ist vollkommen weltfremd. Eine halbwegs gängige Methode ist noch, die Templatedefinitionen in der Headerdatei per include einzubinden. Also ausnahmsweise mal eine Sorucedatei bei include anzugeben. In der Datei dürfen dann aber keine anderen Definitionen (mit externer Linkage) stehen!
-
Ok, vielen Dank für die Erklärung
