2013-10-26 21 views
0

我正在寫一個C++代碼來實現模板隊列,但是當我運行我的代碼時,出現錯誤的結果,而不是預期的結果,這裏是頭文件和主代碼。模板隊列出錯結果

queue.h

#include <iostream> 
#pragma once 
using namespace std; 
typedef int Error_code; 
#define SUCCESS 0 
#define OVERFLOW -1 
#define UNDERFLOW -2 


template <class T> 
class Node{ 
public: 
    T item; 
Node * next; 
Node(){item=0; next=NULL;} 
Node(T n){item=n; next=NULL;} 
}; 

template <class T> 
class queue 
{ 
protected: 
    Node *front, *rear; 
    int count;  

public: 
    queue(){ 
    cout<<"constructor \n"; 
    count = 0; 
    front = rear = NULL;};          
    ~queue(){Node<T> * p;      
    while(front != NULL)    
    { 
     p = front; 
     front = front->next;    
     delete p;     
    }}; 
    bool isempty(){ 
    //return count == 0; 
    if(front==NULL) 
     return true; 
    else 
     return false; 
    }; 
    bool isfull(){return false;}; 
    Error_code serve(){ 
    Error_code outcome = SUCCESS; 
    Node<T> *p; 
    if(isempty()){ 
     cout<<"empty queue\n"; 
     outcome=UNDERFLOW; 
    } 
    else{ 
    p=front; 
    front=front->next; 
    delete p; 
    count--; 
    } 
    return outcome; 
    } ; 
    Error_code retrieve(T &item){ 
    Error_code outcome= SUCCESS; 
    if(isempty()) 
    {   // front node is empty, queue is empty 
     //return false; 
     cout<<"empty queue\n"; 
     outcome=UNDERFLOW; 
    } 
    return outcome; 
    };  


    Error_code append(T item){ 


    Node<T> * n ; 
    n= new Node;    // create node 
    n->item = item;     // set node pointers 
    n->next = NULL;  


    if (isempty())  
     { 
      rear=front = n; 
     } 
    else 
    { 
     rear->next = n;    // else place at rear 
    rear = n;       // have rear point to new node 
    } 
    count++; 
    return SUCCESS; 
    };           
}; 

的main.cpp

#include "queue.h" 
#include <iostream> 
using namespace std; 


int main() 
{ 
    queue<int> q; 
    queue<char> q2; 
    int x; 
    char y; 
    cout<<"the fisrt queue is :"; 
    q.isempty()?cout<<"empty \n\n":cout<<"not empty \n\n"; 
    cout<<"the second queue is :"; 
    q2.isempty()?cout<<"empty \n\n":cout<<"not empty \n\n"; 
    q.append(2); 
    q.append(3); 
    q.append(4); 

    q2.append('a'); 
    q2.append('b'); 
    q2.append('c'); 

    q.retrieve(x); 
    cout<<x<<endl; 
    q.serve(); 

    q.retrieve(x); 
    cout<<x<<endl; 
    q.serve(); 

    q.retrieve(x); 
    cout<<x<<endl; 
    q.serve(); 

    q2.retrieve(y); 
    cout<<y<<endl; 
    q2.serve(); 

    q2.retrieve(y); 
    cout<<y<<endl; 
    q2.serve(); 

    q2.retrieve(y); 
    cout<<y<<endl; 
    q2.serve(); 

    q.retrieve(x); 
    q2.retrieve(y); 
    system("pause"); 
    return 0; 

} 

我得到這些結果:

構造

構造

第一個隊列爲:空

第二隊列是:空

-858993460

-858993460

-858993460

然後它打印一些符號

空隊列

空隊列

+2

使用調試程序遍歷代碼,並親自查看出錯的位置。 – NPE

+0

同樣,缺少模板參數:'Node * front,* rear;''> Node,* back;' - 'n = new Node;' - >'n = new Node ;'和 – dyp

+0

@NPE我該​​怎麼做? 以及它是如何有用,讓我知道它爲什麼會產生錯誤的結果 –

回答

1

retrieve功能不檢索:

Error_code retrieve(T &item){ 
    Error_code outcome= SUCCESS; 
    if(isempty()) 
    {   // front node is empty, queue is empty 
     //return false; 
     cout<<"empty queue\n"; 
     outcome=UNDERFLOW; 
    }else 
    { 
     // needs something like: 
      item = front->item; 
    } 

    return outcome; 
}; 

除了缺少模板參數,它應該工作即可。