Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C++ > Help needed on "no match function error"

Reply
Thread Tools

Help needed on "no match function error"

 
 
Jolie Chen
Guest
Posts: n/a
 
      06-24-2008
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
 
Reply With Quote
 
 
 
 
Jolie Chen
Guest
Posts: n/a
 
      06-24-2008
Victor,

You are right. Thank you so much.

Jolie

On Jun 24, 9:48*am, Victor Bazarov <(E-Mail Removed)> wrote:
> 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>: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

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


 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
re.sub(): replace longest match instead of leftmost match? John Gordon Python 13 12-20-2011 02:58 AM
pat-match.lisp or extend-match.lisp in Python? ekzept Python 0 08-10-2007 06:08 PM
Match doesn't match Volkan Civelek Ruby 4 07-19-2006 07:44 AM
$match = true() for empty $match?? Victor XML 2 05-17-2004 10:43 AM
Java regex can't match lengthy match? hiwa Java 0 01-29-2004 10:09 AM



Advertisments