#include <iostream>
using std:: cin ;
using std:: cout ;
struct node {
int data;
node* prev;
node* next;
} ;
node* find( int ,node* & ) ;
void afterElement( int ,int ,node* & ,node* & ,node* ( * find) ( int , node* & ) ) ;
int main( ) {
node* head = NULL ;
node* tail = NULL ;
// The program itself has a menu that allows for input of value in list but
// for the sake of relevancy and shortness of code I dropped it out from here
int x, y;
cout << "Insert 2 values: value you wish to insert, and value you wish to insert it after. " ;
cin >> x;
cin >> y;
afterElement( x,y,head,tail,find( y, head) ) ; // here is the error "overloaded function..."
return 0 ;
}
node* find( int x,node* & head) {
node* curr = head;
while ( ( curr ! = NULL ) && ( curr- > data ! = x) )
curr = curr- > next;
return curr;
}
void afterElement( int x,int after,node* & head,node* & tail,node* ( * find) ( int x, node* & head) ) {
node* N;
node* compared = ( * find) ( after,head) ;
N- > data = x;
if ( compared == NULL )
cout << "There is no element " << after << " in the list!\n " ;
else {
if ( compared- > next == NULL ) {
compared- > next = N;
N- > prev = compared;
N- > next = NULL ;
tail = N;
} else {
compared- > next- > prev = N;
N- > next = compared- > next;
compared- > next = N;
N- > prev = compared;
}
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBzdGQ6OmNpbjsKdXNpbmcgc3RkOjpjb3V0OwoKCnN0cnVjdCBub2RlIHsKaW50IGRhdGE7Cm5vZGUqIHByZXY7Cm5vZGUqIG5leHQ7Cn07Cgpub2RlKiBmaW5kKGludCxub2RlKiYpOwp2b2lkIGFmdGVyRWxlbWVudChpbnQsaW50LG5vZGUqJixub2RlKiYsbm9kZSogKCpmaW5kKShpbnQsIG5vZGUqJikpOwoKaW50IG1haW4oKSB7CiAgICBub2RlKiBoZWFkID0gTlVMTDsKICAgIG5vZGUqIHRhaWwgPSBOVUxMOwogICAgLy8gVGhlIHByb2dyYW0gaXRzZWxmIGhhcyBhIG1lbnUgdGhhdCBhbGxvd3MgZm9yIGlucHV0IG9mIHZhbHVlIGluIGxpc3QgYnV0CiAgICAvLyBmb3IgdGhlIHNha2Ugb2YgcmVsZXZhbmN5IGFuZCBzaG9ydG5lc3Mgb2YgY29kZSBJIGRyb3BwZWQgaXQgb3V0IGZyb20gaGVyZQoKICAgIGludCB4LCB5OwogICAgY291dCA8PCAiSW5zZXJ0IDIgdmFsdWVzOiB2YWx1ZSB5b3Ugd2lzaCB0byBpbnNlcnQsIGFuZCB2YWx1ZSB5b3Ugd2lzaCB0byBpbnNlcnQgaXQgYWZ0ZXIuICI7CiAgICBjaW4gPj4geDsKICAgIGNpbiA+PiB5OwogICAgYWZ0ZXJFbGVtZW50KHgseSxoZWFkLHRhaWwsZmluZCh5LCBoZWFkKSk7IC8vIGhlcmUgaXMgdGhlIGVycm9yICJvdmVybG9hZGVkIGZ1bmN0aW9uLi4uIgogICAgcmV0dXJuIDA7Cn0KCm5vZGUqIGZpbmQoaW50IHgsbm9kZSomIGhlYWQpIHsKICAgIG5vZGUqIGN1cnIgPSBoZWFkOwogICAgd2hpbGUgKChjdXJyICE9IE5VTEwpICYmIChjdXJyLT5kYXRhICE9IHgpKQogICAgICAgIGN1cnIgPSBjdXJyLT5uZXh0OwogICAgcmV0dXJuIGN1cnI7Cn0KCnZvaWQgYWZ0ZXJFbGVtZW50KGludCB4LGludCBhZnRlcixub2RlKiYgaGVhZCxub2RlKiYgdGFpbCxub2RlKiAoKmZpbmQpKGludCB4LCBub2RlKiYgaGVhZCkpIHsKbm9kZSogTjsKbm9kZSogY29tcGFyZWQgPSAoKmZpbmQpKGFmdGVyLGhlYWQpOwpOLT5kYXRhID0geDsKaWYgKGNvbXBhcmVkID09IE5VTEwpCiAgICBjb3V0IDw8ICJUaGVyZSBpcyBubyBlbGVtZW50ICIgPDwgYWZ0ZXIgPDwgIiBpbiB0aGUgbGlzdCFcbiI7CmVsc2UgewogICAgaWYgKGNvbXBhcmVkLT5uZXh0ID09IE5VTEwpIHsKICAgICAgICBjb21wYXJlZC0+bmV4dCA9IE47CiAgICAgICAgTi0+cHJldiA9IGNvbXBhcmVkOwogICAgICAgIE4tPm5leHQgPSBOVUxMOwogICAgICAgIHRhaWwgPSBOOwogICAgfSBlbHNlIHsKICAgICAgICBjb21wYXJlZC0+bmV4dC0+cHJldiA9IE47CiAgICAgICAgTi0+bmV4dCA9IGNvbXBhcmVkLT5uZXh0OwogICAgICAgIGNvbXBhcmVkLT5uZXh0ID0gTjsKICAgICAgICBOLT5wcmV2ID0gY29tcGFyZWQ7CiAgICB9Cn0KfQoK
compilation info
prog.cpp: In function ‘int main()’:
prog.cpp:25:45: error: cannot convert ‘node*’ to ‘node* (*)(int, node*&)’ for argument ‘5’ to ‘void afterElement(int, int, node*&, node*&, node* (*)(int, node*&))’
afterElement(x,y,head,tail,find(y, head)); // here is the error "overloaded function..."
^
stdout