I am trying to implement a queue based on a Linked List that I had to write previously. It is templated and for some reason I am getting the following error using g++ when I compile:
g++ LinkedQueueMain.cpp -o LinkedQueueMain
/tmp/ccqwStpK.o: In function `main':
LinkedQueueMain.cpp:(.text+0x2ee): undefined reference to `LinkedQueue<char>::operator=(LinkedQueue<char> const&)'
collect2: ld returned 1 exit status
It is saying undefined reference however I have declared and defined it so I cant figure out what the problem is.
This is my class declaration and definition:
// LinkedQueue.h
#ifndef LINKEDQUEUE_H
#define LINKEDQUEUE_H
#include <iostream>
#include "RuntimeException.h"
#include "LinkedList.h"
template<typename T> class LinkedQueue;
template<typename T>
std::ostream& operator<<(std::ostream& out, const LinkedQueue<T>& queue);
template<typename T>
class LinkedQueue {
private:
LinkedList<T> ll;
public:
// user-defined exceptions
class QueueEmptyException : public RuntimeException {
public:
QueueEmptyException() : RuntimeException("Access to an empty queue") {}
};
LinkedQueue() { } // constructor
~LinkedQueue() { } // destructor
LinkedQueue(const LinkedQueue& queue) { ll = queue.ll; } // copy constructor
LinkedQueue& operator=(const LinkedQueue& queue); // assignment operator
// I have cut out accessory function declarations
friend std::ostream& operator<< <>(std::ostream& out, const LinkedQueue<T>& queue); // overload <<
};
//-------------------------------------------------------------------------------------------------------------------------
template<typename T>
LinkedQueue<T>& LinkedQueue<T>::operator=(const LinkedQueue& queue) {
ll = queue.ll;
return *this;
}
// other functions defined here I just cut them out for space
#endif
Here is my main:
#include "LinkedQueue.h"
#include <iostream>
#include <string>
#include <iterator>
using namespace std;
int main()
{
LinkedQueue<char> queue;
LinkedQueue<char> queue_copy;
//===== enqueue() =====
queue.enqueue('1');
queue.enqueue('2');
queue.enqueue('3');
queue.enqueue('4');
queue.enqueue('5');
queue.enqueue('6');
queue_copy = queue; //THIS IS WHERE I BELIEVE THE PROBLEM IS
cerr << "assigning queue to queue_copy, queue_copy = ";
cerr << queue_copy << endl;
cerr << "size of queue_copy = " << queue_copy.size() << endl;
cerr << "first of queue_copy = " << queue_copy.first() << endl << endl;
return 0;
}
Thanks in advance for any help.