I’m implementing a doubly linked list just for fun and for a refresher and getting a strange linker error when I simply try to declare an instance of it in my main function.
The error is:
1>main.obj : error LNK2019: unresolved external symbol "public: __thiscall
d_list<int>::d_list<int>(void)" (??0?$d_list@H@@QAE@XZ) referenced in function _main
1>c:\users\ben\documents\visual studio 2010\Projects\dlist\Debug\dlist.exe : fatal
error LNK1120: 1 unresolved externals
main.cpp is just:
#include "d_list.h"
int main(){
d_list<int> test;
return 0;
}
The structure itself is unfinished, but I’ll paste the code here just in case you guys need it.
Header file:
#ifndef D_LIST_H
#define D_LIST_H
template <class T>
class d_list{
public:
d_list();
d_list(const d_list &_dl);
void push_back(T item);
void push_front(T item);
void pop_back();
void pop_front();
private:
struct node{
node *prev;
node *next;
T data;
};
node *head;
node *tail;
int size;
};
#endif //D_LIST_H
d_list.cpp:
#include "d_list.h"
template <class T>
d_list<T>::d_list(){
}
template <class T>
d_list<T>::d_list(const d_list<T> &_dl){
}
template <class T>
void d_list<T>::push_back(T item){
node *new_tail = new node;
new_tail->data = item;
new_tail->next = head;
new_tail->prev = tail;
tail->next = new_tail;
size++;
}
template <class T>
void d_list<T>::push_front(T item){
node *new_head = new node;
new_head->data = item;
new_head->prev = tail;
new_head->next = head;
head->prev = new_head;
size++;
}
template <class T>
void d_list<T>::pop_back(){
node *temp = tail->prev;
temp->next = head;
delete tail;
tail = temp;
temp = NULL;
}
template <class T>
void d_list<T>::pop_front(){
}
template and its implementation should be defined in header file.
They are not normal functions or class as they are compiled on demand.
Try to remove .cpp and put all the implementation on header file