J
Jolie Chen
I am learning template programming now, and I wrote the following code
#include <iostream>
#include "Queue.h"
using namespace std;
template <typename T> class QueueItem
{
public:
QueueItem(T item):value(item),next(0){}
T value;
QueueItem *next;
};
template <typename T> class Queue
{
private:
QueueItem<T> *head;
QueueItem<T> *tail;
public:
Queue():head(0),tail(0){}
Queue(const Queue &orig):head(0),tail(0)
{
for(QueueItem<T> *temp=orig.head;temp;temp=temp->next)
{
push(temp->value);
}
}
Queue& operator=(Queue& orig)
{
head =0;
tail =0;
for(QueueItem<T> *temp=orig.head;temp;temp=temp->next)
{
push(temp->value);
}
return *this;
}
~Queue()
{
while (head)
{
cout<<"In~Queue";
pop();
}
}
void pop();
void push(T item);
bool empty(){
if (head==0)
return 1;
return 0;
}
};
template <typename T> void Queue<T>:
ush(T item)
{
if(empty())
{
head = new QueueItem<T>(item);
tail=head;
}
else
{
QueueItem<T> *temp;
temp = new QueueItem<T>(item);
tail->next=temp;
tail=temp;
}
}
template <typename T> void Queue<T>:
op()
{
if(!empty())
{
QueueItem<T> *temp;
temp=head;
head = head->next;
cout<< "pop a value of "<<temp->value<<endl;
delete temp;
}
else
{
cerr<<"the Queue is empty, so cannot call pop function"<<endl;
}
}
int main()
{
Queue<int> orig_queue;
for(int i=0; i<8; i++)
orig_queue.push(i);
Queue<int> copy_queue;
copy_queue(orig_queue);//this line has compile error
return 0;
}
and get the compiling error :
no match for call to ‘(Queue<int>) (Queue<int>&)’ Queue Queue.cc line
103 1214317008414 99
for the line copy_queue(orig_queue): line
Could you please help me out for this problem? Thanks
#include <iostream>
#include "Queue.h"
using namespace std;
template <typename T> class QueueItem
{
public:
QueueItem(T item):value(item),next(0){}
T value;
QueueItem *next;
};
template <typename T> class Queue
{
private:
QueueItem<T> *head;
QueueItem<T> *tail;
public:
Queue():head(0),tail(0){}
Queue(const Queue &orig):head(0),tail(0)
{
for(QueueItem<T> *temp=orig.head;temp;temp=temp->next)
{
push(temp->value);
}
}
Queue& operator=(Queue& orig)
{
head =0;
tail =0;
for(QueueItem<T> *temp=orig.head;temp;temp=temp->next)
{
push(temp->value);
}
return *this;
}
~Queue()
{
while (head)
{
cout<<"In~Queue";
pop();
}
}
void pop();
void push(T item);
bool empty(){
if (head==0)
return 1;
return 0;
}
};
template <typename T> void Queue<T>:
{
if(empty())
{
head = new QueueItem<T>(item);
tail=head;
}
else
{
QueueItem<T> *temp;
temp = new QueueItem<T>(item);
tail->next=temp;
tail=temp;
}
}
template <typename T> void Queue<T>:
{
if(!empty())
{
QueueItem<T> *temp;
temp=head;
head = head->next;
cout<< "pop a value of "<<temp->value<<endl;
delete temp;
}
else
{
cerr<<"the Queue is empty, so cannot call pop function"<<endl;
}
}
int main()
{
Queue<int> orig_queue;
for(int i=0; i<8; i++)
orig_queue.push(i);
Queue<int> copy_queue;
copy_queue(orig_queue);//this line has compile error
return 0;
}
and get the compiling error :
no match for call to ‘(Queue<int>) (Queue<int>&)’ Queue Queue.cc line
103 1214317008414 99
for the line copy_queue(orig_queue): line
Could you please help me out for this problem? Thanks