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.
 
    