PDA

View Full Version : [C++] Problemi con template


hfish
15-03-2005, 18:00
ho scritto un programmino stupido stupido


#include<iostream>
using namespace std;

template<class tipo>
tipo max(tipo x, tipo y) {
return (x > y) ? x : y;
}

int main() {
int b = 4, c;
c = max(3, b);
cout << c;
system("pause");
}


per poter riutilizzare una funzione sia con interi che con double senza dover ricorrere all'overloading...

il codice è corretto, ma non vuole saperne di andare...

11 C:\Documents and Settings\root\Desktop\C++\4.2 4.cpp call of overloaded `max(int, int&)' is ambiguous
error C:\Documents and Settings\root\Desktop\C++\4.2 4.cpp:5 candidates are: tipo max(tipo, tipo) [with tipo = int]



se modifico la prima riga in

#include<iostream.h>
//using namespace std;


tutto funziona senza problemi, ricevo però i soliti warning che mi avvisano che sto usando un header deprecato....

soluzioni???:muro:

MSciglio
15-03-2005, 21:19
Originariamente inviato da hfish
ho scritto un programmino stupido stupido


#include<iostream>
using namespace std;

template<class tipo>
tipo max(tipo x, tipo y) {
return (x > y) ? x : y;
}

int main() {
int b = 4, c;
c = max(3, b);
cout << c;
system("pause");
}


per poter riutilizzare una funzione sia con interi che con double senza dover ricorrere all'overloading...

il codice è corretto, ma non vuole saperne di andare...



se modifico la prima riga in

#include<iostream.h>
//using namespace std;


tutto funziona senza problemi, ricevo però i soliti warning che mi avvisano che sto usando un header deprecato....

soluzioni???:muro:

L'errore è normale dato che stai usando la funzione chiamata max già definita nell'STL. Al momento dell'invocazione il compilatore non sa se ti stai riferendo alla tua funzione o a std::max.

Hai diverse soluzioni. La prima è quella di omettere using namespace std come hai fatto e la seconda consiste nel definire un tuo namespace all'interno del quale definire la tua funzione in modo da risolvere ogni ambiguità.
Io preferirei la prima.

hfish
15-03-2005, 22:30
Originariamente inviato da MSciglio
L'errore è normale dato che stai usando la funzione chiamata max già definita nell'STL. Al momento dell'invocazione il compilatore non sa se ti stai riferendo alla tua funzione o a std::max.

Hai diverse soluzioni. La prima è quella di omettere using namespace std come hai fatto e la seconda consiste nel definire un tuo namespace all'interno del quale definire la tua funzione in modo da risolvere ogni ambiguità.
Io preferirei la prima.
grazie mille...
avevorisolto mandando una mail al professore...
ho cambiato il nome della funzione da MAX a qualsiasi altra cosa...

avevo pensato potesse essere quello il problema, ma controllando l'elenco delle keyword non l'avevo trovata...

grazie ancora...
ciao:)

anx721
16-03-2005, 12:35
i nomi delle funzioni di libreria non sono delle keyword...se non non potevi neanche ridefinirle in un tuo namespace.