I want to use templates to implement generic linked lists, where each node of the list contains an element of class T.
This is linked_list.h
#ifndef LIN_LIS
#define LIN_LIS
#include "node.h"
template <class T>
class LinkedList {
public:
//
Node<T>* head;
//
LinkedList() : head( 0 ) {}
//
~LinkedList();
};
#endif
This is linked_list.cpp
#include <iostream>
#include "linked_list.h"
using std::cout;
using std::endl;
template <class T>
LinkedList<T>::~LinkedList() {
Node<T>* p = head;
Node<T>* q;
while( p != 0 ) {
q = p;
//
p = p->next;
//
delete q;
}
}
And this is the test file
#include <iostream>
#include <ctime>
#include "linked_list.h"
using std::cout;
using std::endl;
int main() {
//
LinkedList<int> l;
return 0;
}
This is my makefile
test_linked_0: test_linked_0.o linked_list.o
$(CC) -o test_linked_0 test_linked_0.o linked_list.o $(CFLAGS)
I get the following error:
g++ -o test_linked_0 test_linked_0.o linked_list.o -I.
Undefined symbols for architecture x86_64:
"LinkedList<int>::~LinkedList()", referenced from:
_main in test_linked_0.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
make: *** [test_linked_0] Error 1
Any help would be much appreciated.