Ho scritto questo codice in cui se rimetto il commento alla penultima riga ottengo l'errore - "deduzione argomento argomento/sostituzione fallita:". È a causa di qualche limite alle funzioni generiche in C++? Inoltre, il mio programma non stampa la risposta fluttuante per l'array b
. C'è qualcosa che posso fare per quello? (scusami per aver fatto 2 domande in un singolo post.)
P.S: Ho appena iniziato ad imparare C++.Come utilizzare la funzione generica in C++?
#include <iostream>
using namespace std;
template <class T>
T sumArray( T arr[], int size, T s =0)
{
int i;
for(i=0;i<size;i++)
{ s += arr[i];
}
return s;
}
int main()
{
int a[] = {1,2,3};
double b[] = {1.0,2.0,3.0};
cout << sumArray(a,3) << endl;
cout << sumArray(b,3) << endl;
cout << sumArray(a,3,10) << endl;
//cout << sumArray(b,3,40) << endl; //uncommenting this line gives error
return 0;
}
EDIT 1: Dopo aver cambiato 40-40,0, il codice funziona. Ecco l'uscita ottengo:
ancora non si ottiene la risposta che galleggia nel secondo caso. Qualche suggerimento ?
Il compilatore dice già questo, ma si deduce 'double' da' B' e 'int' da' 40'. Non fa il possibile per indovinare le conversioni ed eventualmente compilare un errore. È perfettamente possibile farlo ignorare i parametri quando si deducono i tipi. – chris
Ho notato la tua modifica, ma ti suggerisco caldamente di non aggiungere nuove domande al corpo della domanda una volta che hai già ricevuto una risposta (o in realtà un sacco di risposte), perché ciò trarrà le risposte in qualche modo non pertinenti. Potresti voler fare una nuova domanda, ma per questo caso, perché pensi che la risposta non sia in virgola mobile? La risposta è _exact__ 46, sia esso intero o virgola mobile. Prova a mettere alcuni numeri non interi su 'b' e ricontrolla. – Petr
@Petr Grazie .. Mi prenderò cura di non fare 2 domande in un singolo post. – shane