Syntaxfehler im Bezug auf Templates



  • Hallo,

    ich bin ganz neu hier im Forum. Momentan arbeite ich mich in die Standardbibliothek ein an Hand des Buches: [url] http://www.amazon.de/Die-C-Standardbibliothek-Einführung-Nachschlagewerk/dp/3540256938/ref=sr_1_1?ie=UTF8&s=books&qid=1248871575&sr=8-1 [/url] .

    Leider bekomme ich immer einen Fehler an folgender Stelle:

    typename Operation::result_type operator()
    			(const typename Operation:second_arguemnt_type &x) const
    		{
    			return op(value, x);
    		}
    

    Gesamtkontext:

    #include <iostream>
    #include <functional>
    #include <algorithm>
    
    using namespace std;
    
    template <typename Operation>
    class Binder1st : public unary_function <typename Operation::second_argument_type, typename Operation::result_type>
    {
    	public:
    		Binder1st(const Operation &o, const typename Operation::first_argument_type &v): op(o), value(v)
    		{
    
    		}
    
    		typename Operation::result_type operator()
    			(const typename Operation:second_arguemnt_type &x) const
    		{
    			return op(value, x);
    		}
    
    		//virtual ~Binder1st();
    
    	protected:
    		Operation op;
    		typename Operation::first_argument_type value;
    
    };
    

    Als Entwicklungsumgebung nutze ich Eclipse und arbeite auf einem Mac.

    Könnt ihr mir sagen was dort falsch ist? Ich bekomme immer einen Syntaxerror, weiß aber nicht was genau falsch ist.

    Bin über jeden Tipp dankbar.

    Viele Grüße
    MM

    PS. Wieso bekommt man beim ersten keine Zeilennummer davor?



  • Wir könnten Dir sagen, was falsch ist, wenn Du uns sagen würdest, was der Compiler bemängelt...

    Das falsch geschriebene arguemt_type kann es nicht sein, oder? Das hättest Du beim Lesen der Fehlermeldung sicherlich selbst herausgefunden 😉


  • Administrator

    MrMilk schrieb:

    Leider bekomme ich immer einen Fehler an folgender Stelle:

    Die da lautet? GEBT UNS DIE FEHLERMELDUNGEN! Herje ... 😃

    MrMilk schrieb:

    PS. Wieso bekommt man beim ersten keine Zeilennummer davor?

    Der Code hat zuwenig Zeilen.

    Grüssli



  • Wow, die Antwort kam aber schnell!

    Ich habe es jetzt berichtigt (so ein doofer Fehler):

    typename Operation::result_type operator()
    			(const typename Operation:second_argument_type &x) const
    		{
    			return op(value, x);
    		}
    

    Aber so ganz einig sind der Compiler und ich uns noch nicht:

    ../src/Binder1st.h:28: error: expected nested-name-specifier before 'Operation'
    ../src/Binder1st.h:28: error: expected ',' or '...' before ':' token
    ../src/Binder1st.h: In member function 'typename Operation::result_type Binder1st<Operation>::operator()(int) const':
    ../src/Binder1st.h:28: error: declaration of 'const int Operation'
    ../src/Binder1st.h:17: error: shadows template parm 'class Operation'
    ../src/Binder1st.h:30: error: 'x' was not declared in this scope
    make: *** [src/Binder1st.o] Error 1

    Vielleicht fehlt mir noch die Erfahrung, aber einen klaren Fehler sehe ich noch nicht. Könntest du mir noch einmal einen Tipp geben?

    Viele Grüße
    MM


  • Administrator

    Da fehlt ein Doppelpunkt:
    Operation:**:**second_argument_type

    Grüssli



  • Ich glaube so etwas nennt man "Lesefehler" - und diese finden sich meist ganz leicht, wenn man nen Kaffee trinkt und das Programm danach nochmal mit etwas Ruhe begutachtet 😃

    Bei "typename Operation:second_argument_type" fehlt ein Doppelpunkt (Scope-Operator ist "::") nach Operation.

    PS:
    Du hast aber vollkommen recht mit Deiner Einschätzung. Um von dem, was der Compiler meldet, sofort darauf zu kommen, was falsch ist, braucht man IMO tatsächlich einiges an Erfahrung.



  • Autsch. Jetzt wird es Zeit einen roten Kopf zu bekommen.

    Vielen Dank für die Hilfe 🙂

    Viele Grüße
    MM


Anmelden zum Antworten