std::for_each will nicht
-
Mein testcode:
#include <string> #include <algorithm> #include <iostream> int main() { class Worker : public std::unary_function<char, void> { public: void operator()(char& data) {data++;} }; std::string text = "ABCabc"; std::cout << text << std::endl; std::for_each(text.begin(), text.end(), Worker()); std::cout << text << std::endl; }
foreach.cpp:20:2: warning: no newline at end of file foreach.cpp: In function ‘int main()’: foreach.cpp:17: error: no matching function for call to ‘for_each(__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> > >, main()::Worker)’
Sagt mir, was ich falsch mache
EDIT://
Scheint als wäre std::unary_function ein antikes Erbe, das in meiner Version von offline cplusplus.com noch überlebt hat.Folgendes Compiliert mit MS VC8 (wine 0.9.53)
#include <string> #include <algorithm> #include <iostream> int main() { class Worker { public: void operator()(char& data) {data++;} }; std::string text = "ABCabc"; std::cout << text << std::endl; std::for_each(text.begin(), text.end(), Worker()); std::cout << text << std::endl; }
G++ 4.2.1 bringt immer noch den selben Fehler
-
Du musst
Worker
leider aus der main rausziehen. Lokale Typen können keine Templateparameter sein.
-
Zu was les ich eigentlich gare nen Buch über templates?
Danke für den Tip, so geht's mal wieder (interessant, dass es MSVC trotzdem übersetzt )
-
darthdespotism schrieb:
EDIT://
Scheint als wäre std::unary_function ein antikes Erbe, das in meiner Version von offline cplusplus.com noch überlebt hat.Nein.
-
Noch was gelernt. Dann bindet <algorithm> einfach nicht mehr <functional> ein beim MS VC und benötigt ist es nicht mehr für for_each.
-
darthdespotism schrieb:
Zu was les ich eigentlich gare nen Buch über templates?
Danke für den Tip, so geht's mal wieder (interessant, dass es MSVC trotzdem übersetzt )
Wenn du MSVC 8 die "Language Extensions" ausdrehst bekommst du folgenden Fehler: "error C2918: 'main::Worker' : illegal use of local type in template instantiation"