Avatar billede zyxtem Nybegynder
29. august 2003 - 17:49 Der er 9 kommentarer og
1 løsning

Problemer med template

Hej eksperter.

  Jeg er i gang med at lære om templates men jeg kan ikke linke min kode:

#include <iostream>
#include <cstdlib>

using namespace std;


template<class T> T test(T a, T b)
{
    return a+b;
}

int test(int, int);
float test(float, float);

int main()
{
    int i=2;
    int h=9;
   
    cout<<test(i, h);
    system("pause");
    return 0;
}

Dev-cpp siget: " [Linker error] undefined reference to `test(int, int)'"

Nogen der kan se hvad jeg gør forkert
Avatar billede arne_v Ekspert
29. august 2003 - 17:55 #1
#include <iostream>
#include <cstdlib>

using namespace std;


template<class T> T test(T a, T b)
{
    return a+b;
}

int main()
{
    int i=2;
    int h=9;
    cout << test<int>(i, h) << endl;
    system("pause");
    return 0;
}

compiler og kører.
Avatar billede zyxtem Nybegynder
29. august 2003 - 18:10 #2
test<int>(i, h).. Er det noget nyt for det hvor jeg læser står der at man skal erklære funktionerne og ellers bare bruge dem normalt.....
Avatar billede zyxtem Nybegynder
29. august 2003 - 18:12 #3
dårlig formulering. Godt min dansklærer ikke så den. I de bøger/tutorials jeg bruger står der at man bare skal erklære funktionerne og derefter bruge dem normalt
Avatar billede arne_v Ekspert
29. august 2003 - 18:27 #4
Hm.

Jeg er ikke selv skrap til templates - jeg tog din kode og gjorde
som beskrevet i tut på cplusplus.com oh så virkede det.
Avatar billede zyxtem Nybegynder
29. august 2003 - 19:51 #5
Lige et lille sidste spørgsmål. Det vil altså sige at vectorer faktisk er templates?
Avatar billede arne_v Ekspert
29. august 2003 - 19:54 #6
Ja.

Vectors er en del af STL (Standard Template Library).
Avatar billede soreno Praktikant
29. august 2003 - 20:04 #7
Pointen er at du med:
template<class T> T test(T a, T b)

Kan erstatte T med en vilkårlig datatype. Dermed behøver du ikke implementere en masse metoder der faktisk gør det samme.


Når du kalder metoden med:
test<int>(i, h)

Bliver T erstattet med int, og koden kommer til at se sådan ud:
int test(int a, int b)
[..]

Du kunne også kalde den med 2 stl strings:
test<string>(str1, str2);

Så bliver resultatet:
string test(string a, string b)
[..]
Avatar billede zyxtem Nybegynder
29. august 2003 - 20:08 #8
tak for savrende, de var en stor hjælp
Avatar billede segmose Nybegynder
03. september 2003 - 08:58 #9
Er der nogen speciel årsag til at du vil bruge denne måde at kalde test på test<int>(i, h) istedet for test(i, h) som jo er det samme når i og h er int, hvis i og h havde været float var der måske en ide i den første måde, hvis man ville insistere på at lave en int beregning (efter en forudgående implicit int convertering).
Avatar billede arne_v Ekspert
03. september 2003 - 09:56 #10
Jeg synes at det er pænest eksplicit at angive typen.
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