I am new to the c++ language and need help with the problem below. Presently, I am trying to get my head around "templates" and "function pointers". The following template class, Queue, compiles when written into a single .cpp file:
template <typename T> class Queue
{
public:
Queue()
{
m_add = m_remove = 0;
}
void enque(T *c)
{
m_array[m_add] = c;
m_add = (m_add + 1) % SIZE;
}
T *deque()
{
int temp = m_remove;
m_remove = (m_remove + 1) % SIZE;
return m_array[temp];
}
private:
enum
{
SIZE = 8
};
T *m_array[SIZE];
int m_add, m_remove;
};
However, when I separate this code into the .h and .cpp files (as below), I get errors where I am defining the function pointer in the .cpp file; near the line:
template<typename T>
T (Queue<T>::*deque)() {
Queue.h:
#ifndef QUEUE_H_
#define QUEUE_H_
template<typename T>
class Queue {
enum {
SIZE = 8
};
T *m_array[SIZE];
int m_add, m_remove;
public:
Queue();
virtual ~Queue();
void enque(T *c);
T *deque();
};
#endif /* QUEUE_H_ */
Queue.cpp:
#include "Queue.h"
template<typename T>
Queue<T>::Queue() {
m_add = m_remove = 0;
}
template<typename T>
Queue<T>::~Queue() {
}
template<typename T>
void Queue<T>::enque(T *c) {
m_array[m_add] = c;
m_add = (m_add + 1) % SIZE;
}
template<typename T>
T (Queue<T>::*deque)() {
int temp = m_remove;
m_remove = (m_remove + 1) % SIZE;
return m_array[temp];
}
I am hoping that one of you c++ experts could help me understand how to define the function pointer < T *deque() > Thank you in advance for your help.