2015-02-24 48 views
-3

我已经定义了一个实现队列的模板类。C++模板类显示意外的结果

我插入INT与值:0 1 2 3 4 5 6 7 8 9 10 11 12 13 14

当显示在屏幕队列内容我得到的值:

0 1 2 3 4 5 6 7 10 11 12 13 14 15 16代替。

我不明白为什么会有这种差异。请你能帮助我吗?

// Queue.h文件

template <class T> class Queue 
{ 
private: 
    int numElements; 
    T* chain; 
    int limit; 


public: 
    // Constructor 
    Queue (int); 

    void PutElement(T); 
    T GetElement(); 
    void Print(); 
}; 



// Class Constructor. 
template <class T> Queue<T>::Queue (int pNumElements) 
{ 
numElements = pNumElements; 
chain = new T[numElements]; 
limit = 0; 
}; 



// Member functions. 

template <class T> void Queue<T>::PutElement (T pElement) 
{ 
if (limit < numElements) 
    chain[limit++] = pElement; 
else 
    cout << "ERROR WHEN TRY TO INSERT A NEW ELEMENT: Queue is full.\n"; 
}; 




template <class T> T Queue<T>::GetElement() 
{ 
T tempElement; 

if (limit == 0) 
    { 
    cout << "ERROR: Queue is empty\n"; 
    return NULL; 
    } 

tempElement = chain[0]; 

if (limit >= 2) 
    for (int pos=1; pos < limit; pos++) 
     chain[pos-1] = chain[pos]; 

limit--; 

return tempElement; 
}; 




template <class T> void Queue<T>::Print() 
{ 
cout << "QUEUE CONTENTS: "; 

for (int pos=0; pos<limit; pos++) 
    if (pos < limit-1) 
     cout << chain[pos] << ", "; 
    else 
     cout << chain[pos] << endl; 
}; 


// main.cpp file: 

#include <iostream.h> 
#include "Queue.h" 


void main() 
{ 
cout << "\nint values QUEUE\n"; 
Queue <int> q1(15); // Max number of elements in queue is 15. 
for (int aux=0; aux<17;aux++) 
    q1.PutElement(aux); 

q1.Print(); 

for (aux=1; aux<20;aux++) 
    cout << "Queue element number " << aux << " is : " << q1.GetElement() <<  endl; 
}" 




// Screen result: 

int values QUEUE 
ERROR WHEN TRY TO INSERT A NEW ELEMENT: Queue is full. 
ERROR WHEN TRY TO INSERT A NEW ELEMENT: Queue is full. 
QUEUE CONTENTS: 0, 1, 2, 3, 4, 5, 6, 7, 10, 11, 12, 13, 14, 15, 16 
Queue element number 1 is : 0 
Queue element number 2 is : 1 
Queue element number 3 is : 2 
Queue element number 4 is : 3 
Queue element number 5 is : 4 
Queue element number 6 is : 5 
Queue element number 7 is : 6 
Queue element number 10 is : 7 
Queue element number 11 is : 10 
Queue element number 12 is : 11 
Queue element number 13 is : 12 
Queue element number 14 is : 13 
Queue element number 15 is : 14 
Queue element number 16 is : 15 
Queue element number 17 is : 16 
ERROR: Queue is empty 
Queue element number 20 is : 0 
ERROR: Queue is empty 
Queue element number 21 is : 0 
ERROR: Queue is empty 
Queue element number 22 is : 0 
ERROR: Queue is empty 
Queue element number 23 is : 0" 
+0

我很困惑,为什么不使用调试器?如果你不知道如何,请花点时间学习。 – 2015-02-24 18:42:18

+0

这似乎是某种非标准的C++:iostream.h是非标准的void main是非标准的aux在main的第二个循环中是undefined,在header中有很多非法的namespace-level分号。下载一些更新的C++编译器并使用它。 – 2015-02-24 22:40:43

回答

0

也许我被你正在尝试做的糊涂了,但你不与值插入INT 0〜14的主要功能,你说就在那里

for (int aux=0; aux<17;aux++) 
    q1.PutElement(aux); 

这是输入值为0到16的整数,如输出所见。

+0

我认为OP意味着他们将队列定义为最大大小为15,之后PutElement方法应该(并声称)拒绝添加更多项目。 – Gretchen 2015-02-24 19:27:28