Help needed on "no match function error"

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>::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
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
 
J

Jolie Chen

Victor,

You are right. Thank you so much.

Jolie

Jolie said:
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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,767
Messages
2,569,570
Members
45,045
Latest member
DRCM

Latest Threads

Top