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
MMPS. 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

-
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 1Vielleicht 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
-
Da fehlt ein Doppelpunkt:
Operation:**:**second_argument_typeGrü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