c++: transform (.. toupper): Problem mit g++

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
badera
Beiträge: 643
Registriert: 20.05.2004 20:01:50
Wohnort: Schweiz

c++: transform (.. toupper): Problem mit g++

Beitrag von badera » 07.04.2007 13:42:05

Ich habe folgendes Codebeipiel:

Code: Alles auswählen

#include <iostream>
#include <algorithm>
#include <cctype>
#include <string>
using namespace std;

int main(int argc, char *argv[])
{
    string  test = "hello WORLD";
    transform (test.begin(), test.end(), test.begin(), toupper);
    cout << test << endl;
    return 0;
}
Wenn ich es kompilieren will, kommt folgende Fehlermeldung:

Code: Alles auswählen

cd '.../transfromtest/debug' && WANT_AUTOCONF_2_5="1" WANT_AUTOMAKE_1_6="1" make -k 
make all-recursive
Making all in src
compiling transfromtest.cpp (g++)
.../src/transfromtest.cpp: In function ‘int main(int, char**)’:
.../src/transfromtest.cpp:17: error: no matching function for call to ‘transform(__gnu_cxx::__normal_iterator<char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, __gnu_cxx::__normal_iterator<char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, __gnu_cxx::__normal_iterator<char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, <unresolved overloaded function type>)’
make[2]: *** [transfromtest.o] Error 1
make[2]: Target `all' not remade because of errors.
make[1]: *** [all-recursive] Error 1
make: *** [all] Error 2
*** Exited with status: 2 ***
Was ist hier falsch? - Das ist doch Standard C++ gemäss STL? [1]

Ich verwende KDevelop 3.3.5 mit g++ 4.1.2. (z.B. kann ich das Beispiel mit C++ Builder von Borland unter Windows kompilieren...)

Vielen Dank für Eure Hilfe!
- Adrian

[1]
http://www.josuttis.com/libbook/string/iter1.cpp.html

Benutzeravatar
uljanow
Beiträge: 529
Registriert: 20.09.2005 21:14:00

Re: c++: transform (.. toupper): Problem mit g++

Beitrag von uljanow » 07.04.2007 13:47:49

Code: Alles auswählen

    transform (test.begin(), test.end(), test.begin(), (int(*)(int)) toupper);
toupper ist überladen.

Benutzeravatar
badera
Beiträge: 643
Registriert: 20.05.2004 20:01:50
Wohnort: Schweiz

Beitrag von badera » 07.04.2007 14:03:21

VIelen Dank für die sehr rasche und 100% treffende Antwort!

Kannst Du mir noch einen Tipp zur Selbsthilfe geben? - Wie hätte ich das selbst rausfinden können? Bzw. wo finde ich die Funktionsprototypen der STL-Implementation von g++?
Besten Dank!
- Adrian

Antworten