Problema templates

Intrebari despre limbajul C++, standardul C++, STL, OOP in C++ sau alte subiecte nelegate de VisualC++
Post Reply
Raduku077
Junior
Junior
Posts: 20
Joined: 09 Jan 2014, 15:41
Judet: Iaşi

Problema templates

Post by Raduku077 » 09 Jan 2014, 15:44

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 .
Last edited by Raduku077 on 09 Jan 2014, 16:31, edited 1 time in total.



User avatar
bu7ch3r
Membru++
Membru++
Posts: 326
Joined: 17 May 2011, 15:17
Judet: Iaşi
Location: Sofia
Contact:

Re: Problema templates

Post by bu7ch3r » 09 Jan 2014, 16:30

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 :)
Cu stima,
Lupu Claudiu

Raduku077
Junior
Junior
Posts: 20
Joined: 09 Jan 2014, 15:41
Judet: Iaşi

Re: Problema templates

Post by Raduku077 » 09 Jan 2014, 16:43

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 .
Attachments
3.png
3.png (123.35 KiB) Viewed 4335 times

User avatar
bu7ch3r
Membru++
Membru++
Posts: 326
Joined: 17 May 2011, 15:17
Judet: Iaşi
Location: Sofia
Contact:

Re: Problema templates

Post by bu7ch3r » 09 Jan 2014, 17:18

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....
Cu stima,
Lupu Claudiu

User avatar
Marius Bancila
Fondator
Fondator
Posts: 2344
Joined: 11 Jul 2007, 11:45
Judet: Timiş
Location: Timisoara
Contact:

Re: Problema templates

Post by Marius Bancila » 09 Jan 2014, 19:42

E doar o declarare a functiilor. Probabil sunt definite dincole de main().
Marius Bancila
Fondator Codexpert, Microsoft MVP VC++
Site personal | Blog

Post Reply