我定义和实现了一个模板类
仿写的(编译通过)
template <class T>
class Queue
{
    private:
        int front, rear, count; //队头指针、队尾指针、元素个数
        T qlist[MaxQSize]; //队列元素数组

    public:
        Queue (void);          //构造函数,初始化队头指针、队尾指针、元素个数
        void QInsert(const T& item); //新元素入队
        T QDelete(void); //元素出队
        void ClearQueue(void); //清空队列
        
        T QFront(void) const; //访问队首元素
        
        // 测试队列状态
        int QLength(void) const; //求队列长度(元素个数)
        int QEmpty(void) const; //判队队列空否
        int QFull(void) const; //判断队列满否
};// 构造函数,初始化队头指针、队尾指针、元素个数
template <class T>
Queue<T>::Queue (void) : front(0), rear(0), count(0)
{}template <class T>
void Queue<T>::QInsert (const T& item) //向队尾插入元素(入队)
{
    if (count == MaxQSize) // 如果队满,中止程序
    {
        std::cerr << "Queue overflow!" << endl;
        exit(1);
    }
    count++; //元素个数增1
    qlist[rear] = item; //向队尾插入元素
    rear = (rear+1) % MaxQSize; //队尾指针增1,用取余运算实现循环队列
}template <class T>
T Queue<T>::QDelete(void) //删除队首元素,并返回该元素的值(出队)
{
    T temp;
    if (count == 0) // 如果队空,中止程序
    {
        std::cerr << "Deleting from an empty queue!" << endl;
        exit(1);
    }
    temp = qlist[front]; // 记录队首元素值
    count--; // 元素个数自减
    front = (front+1) % MaxQSize; //队首指针增1。取余以实现循环队列
    return temp; //返回首元素值
}
我的问题是
我在我的应用程序里面对于一个BYTE *BUF;如何调用这个init  QInsert QDelete???????????????
这个写法该怎么写?Queue<BYTE *>::Queue (void)Queue<BYTE *>::QDelete(void)????????????????
而且buf = (BYTE *)malloc(4096);很感谢
写一句就好了
我老是写不对对模板理解 不深

解决方案 »

  1.   

    Queue<BYTE> q; // 定义一个对象。
    q.QDelete(); // 通过对象调用函数。
      

  2.   

    你这不光是模板的问题,首先要搞清楚构造函数的机制构造函数不是写代码显式调用的,而是定义对象时编译器自动调用另外,如果需要通过某种参数初始化对象,则需要写一个带参构造器模板的问题是,你在实例化模板时,需要给出T的实际类型
    template <class T> 
    Queue <T>::Queue (BYTE * p)
    {
        //你需要实现这个带参构造器
    }buf = (BYTE *)malloc(4096); 
    Queue<double> q(buf); //你要确定容器中装什么类型的数据,这里假设你要装double型的数据
    q.QDelete(); 
      

  3.   

    为什么还要带参数  我只要一个 T为 BYTE* 的队列不久OK了么
      

  4.   

    因为你的目的有歧义如果你是希望Queue存储一队BYTE*指针,那么Queue<BYTE *> q;就可以工作而我当时理解你是要用自己分配的buf内存来存储Queue的元素
    buf = (BYTE *)malloc(4096);
    如果是这样的话,需要用buf来构建Queue,就需要那样了