我是新來的C++語言,需要下面的問題的幫助。目前,我正試圖讓我的頭腦「模板」和「函數指針」。下面的模板類,隊列,編譯時寫入一個.cpp文件:模板和函數指針:如何定義在模板類中聲明的函數指針?
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;
};
然而,當我分開這個代碼到h和.cpp文件(如下),我得到我的錯誤在.cpp文件中定義函數指針;線附近:
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];
}
我希望你們中的一個C++高手可以幫助我瞭解如何定義函數指針< T * deque()>預先感謝您的幫助。
你要注意「* C++指針*」,以及它們如何工作。因爲你的代碼可能不安全! –
@Biagio,謝謝你的警告。 – Otelagh