scrittura:
for_each(c.begin(), c.end(), ::tolower);
Oppure:
for_each(c.begin(), c.end(), (int(*)(int))tolower);
Ho affrontato questo problema così tante volte che Sono stanco di sistemarlo nel mio codice, così come nel codice degli altri.
Motivo per cui il codice non funziona: non c'è un'altra funzione sovraccaricata tolower
nello spazio dei nomi std
che sta causando problemi durante la risoluzione del nome, perché il compilatore non è in grado di decidere quale sovraccaricare ti riferisci, quando semplicemente passa tolower
. Questo è il motivo per cui il compilatore sta dicendo unresolved overloaded function type
nel messaggio di errore, che indica la presenza di overload (s).
Quindi, per aiutare il compilatore a risolvere al sovraccarico corretta, devi lanciare tolower
come
(int (*)(int))tolower
poi il compilatore ottiene il suggerimento per selezionare la tolower
funzione globale, che in altri modi, può essere utilizzato scrivendo ::tolower
.
1. Immagino che tu abbia scritto using namespace std
nel tuo codice. Ti suggerirei anche di non farlo. Utilizza nomi completi in generale.
A proposito, penso che si desidera trasformare la stringa di input in minuscolo, in caso affermativo, allora std::for_each
sarebbe non farlo. Hai per usare std::transform
funzione di:
std::string out;
std::transform(c.begin(), c.end(), std::back_inserter(out), ::tolower);
//out is output here. it's lowercase string.
grazie mille! Sfortunatamente questa è una classe STL e non dovevamo ancora usare la trasformazione. – bluetickk
Se vuole modificare la stringa di input sul posto, può fornire la propria funzione a 'std :: for_each'. [Mi piace questo] (http://ideone.com/3V7CN). –
@bluetickk: Ma stai usando 'std :: for_each' in ogni caso. Perché non puoi usare 'std :: transform'? – Nawaz