Page 1 of 1

Problema templates

Posted: 09 Jan 2014, 15:44
by Raduku077
Buna ziua ! E prima oara cand cer ajutorul pe un forum .
Invat din Totul despre C/C++ ( Jamsa & Klander ) si am o problema legata de template-uri.
Aici este codul sursa :
#include "stdafx.h"
#include <iostream>
using namespace std;

template<class T, class T1, class T2> T ad_valori(T1 a, T2 b)
{
return (a + b);
}

int ad_valori(int a, double b);

void main(void)
{
int a = 20;
double b = 65.6;

cout << " Adunam " << a << ' ' << b << ' ' << ad_valori(a, b) << endl;

}



Iar aici este eroarea data de compilator :

1>sablon.obj : error LNK2019: unresolved external symbol "int __cdecl ad_valori(int,double)" (?ad_valori@@YAHHN@Z) referenced in function _main
1>D:\Teorie\Programe C++\sablon\Debug\sablon.exe : fatal error LNK1120: 1 unresolved externals

Daca folosesc :
template<class T> T aduna(T a, T b)
{
return (a + b);
}
template<class T, class T1> T scade(T a, T1 b)
{
return(a - b);
}
problema dispare .

Folosesc Visual Studio 2010 , Windows 7 x 86 .

Re: Problema templates

Posted: 09 Jan 2014, 16:30
by bu7ch3r
Pai de ce ai mai declarat si functia netemplate ad_valori? Daca ai declarat-o trebuie s-o definesti.
{ return a+b;} //ai incredere ca o sa faca a+b si nu return a <<adik scoate parantezele alea ca-s inutile>>

DAAAAR: cand apelezi ad_valori(a,b) o sa apeleze ad_valori netemplate. Daca o sa apelezi ad_valori(a, a) o sa-ti dea eroare si o sa-ti spuna ca al 2-lea param trebuie sa fie double.

Ca sa apelezi ad_valori din template tre sa ii spui care-s param T, T1, T2: ad_valori<int, int, double>ad_valori(a,b). E C++ nu D

O sa-ti dea eroare probabil sau warning la adunarea din functie pt ca tu intorci T si T e int, iar a+b in cazul tau e double.

In rest, e inutil sa faci ce faci dar e bun exercitiul :)

Re: Problema templates

Posted: 09 Jan 2014, 16:43
by Raduku077
bu7ch3r wrote:Pai de ce ai mai declarat si functia netemplate ad_valori? Daca ai declarat-o trebuie s-o definesti.
{ return a+b;} //ai incredere ca o sa faca a+b si nu return a <<adik scoate parantezele alea ca-s inutile>>

DAAAAR: cand apelezi ad_valori(a,b) o sa apeleze ad_valori netemplate. Daca o sa apelezi ad_valori(a, a) o sa-ti dea eroare si o sa-ti spuna ca al 2-lea param trebuie sa fie double.

Ca sa apelezi ad_valori din template tre sa ii spui care-s param T, T1, T2: ad_valori<int, int, double>ad_valori(a,b). E C++ nu D

O sa-ti dea eroare probabil sau warning la adunarea din functie pt ca tu intorci T si T e int, iar a+b in cazul tau e double.

In rest, e inutil sa faci ce faci dar e bun exercitiul :)

Multumesc frumos ! Abia ieri am invatat template-urile iar in carte asa era prezentat .

Re: Problema templates

Posted: 09 Jan 2014, 17:18
by bu7ch3r
Acolo e doar o bucata din cod. Probabil incearca sa-ti explice avantajele dintre functii si template la functii. Mai citeste, sau citeste tot, nu copia doar codul....

Re: Problema templates

Posted: 09 Jan 2014, 19:42
by Marius Bancila
E doar o declarare a functiilor. Probabil sunt definite dincole de main().