Avatar billede montago Praktikant
13. maj 2006 - 23:22 Der er 6 kommentarer og
1 løsning

C++ function template med call by reference

sidder og bikser med noget C++, men forstår ikke helt hvorfor compileren brokker sig (visual c++ 6.0).

jeg startede med at lave funktionen uden template, men når jeg template'r den, siger compileren:
"none of 2 overload have a best conversion"
"ambigious call to overloaded function"


template <class Type>
void swap(Type & a,Type & b){ // <-- her bruges reference
    Type tmp = b;
    b = a;
    a = Type;
}
void exc14_4(){
    int a=2 , b=5;
    swap(a,b);  //<-- fejlen pejer her...
    cout << "a:" << a << endl << "b:" << b << endl;
}
Avatar billede montago Praktikant
13. maj 2006 - 23:23 #1
hov... fejl,

template <class Type>
void swap(Type & a,Type & b){ // <-- her bruges reference
    Type tmp = b;
    b = a;
    a = tmp; //<-- rettet
}
void exc14_4(){
    int a=2 , b=5;
    swap(a,b);  //<-- fejlen pejer her...
    cout << "a:" << a << endl << "b:" << b << endl;
}

*var ikke fejlen
Avatar billede arne_v Ekspert
13. maj 2006 - 23:29 #2
Din kode ser OK ud - det kan være en VC++ 6.0 bug !
Avatar billede montago Praktikant
13. maj 2006 - 23:32 #3
kunne være man skulle opgradere til en nyere version ;)
Avatar billede arne_v Ekspert
13. maj 2006 - 23:40 #4
hm - jeg prøvede lige på min game NT4 VC++6 box - det compilede

hvilken service pack af VC++6 har du ?
Avatar billede montago Praktikant
13. maj 2006 - 23:46 #5
tjae, direkte fra cd'en... ved det ikke... en monster gammel en

men prøver lige den nye Visual C++ Express...
Avatar billede arne_v Ekspert
19. juni 2006 - 00:05 #6
Kommet videre ?
Avatar billede montago Praktikant
19. juni 2006 - 10:35 #7
tilsyneladende... havde glemt alt om det --- Bestod C++ eksamen ;)

//using pointers...

template <class T>void swap(T* a,T* b){
    T tmp = b;
    b = a;
    a = tmp;
}
/*
//address swapping
template <class Type>
void swap(Type a,Type b){
    Type tmp = b;
    b = a;
    a = tmp;
}*/
void exc14_4(){
    int a=2 , b=5;

    swap(a,b);
    cout << "a:" << a << endl << "b:" << b << endl;
    /*
    swap(&a,&b);
    cout << "a:" << a << endl << "b:" << b << endl;*/
}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester