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"


Log in to reply