"unrecognized Token" beim Aufruf einer Methode der Template-Basisklasse



  • Hallo,

    ich habe eine Template Basisklasse, bei der kein Datentyp, sondern ein festes Argument übergeben wird. Eine davon abgeleitete Klasse überschreibt die darin enthaltene Methode "foo".
    Beim Aufruf der Basismethode erhalte ich die Fehler "unrecognized Token" & "expected an identifier".

    Ich habe schon einiges versucht, z.B. die Argumentenliste leer zu lassen, die Funktion ebenfalls eine Template Funktion zu machen, oder die Basisklasse wie eine nicht-template-Klasse zu behandeln. Aber alles verursacht natürlich Fehlermeldungen.

    Weiß jemand wie ich das Problem lösen kann? Vielleicht ist die Lösung auch so simpel, dass ich sie gerade vor Frust einfach nicht mehr durchblicke 😃
    Ich sag schon mal Danke.

    template <int num_elements>
    class base_class
    {
        public:
    
            virtual void foo ()
            {
                // do something
            }
    
        private:
    
            float my_array [num_elements];
    };
    
    class child_class
        : public base_class <10>
    {
        public:
    
            virtual void foo ()
            {
                // do something
    
                base_class <10>::foo(); // <-- unrecognized token / expected an identifier
            }
    };
    

  • Mod

    Kann ich nicht nachvollziehen. Hast du den Code vielleicht zu stark gekürzt? Wie lautet die vollständige Fehlermeldung?



  • Mir ists auch ein Rätsel.

    1>  foo.cpp
    1>foo.cpp(25): error : unrecognized token
    1>                base_class <10>::foo(); // <-- unrecognized token
    1>                          ^
    1>  
    1>foo.cpp(25): error : unrecognized token
    1>                base_class <10>::foo(); // <-- unrecognized token
    1>                                ^
    1>  
    1>foo.cpp(25): error : expected an identifier
    1>                base_class <10>::foo(); // <-- unrecognized token
    1>                          ^
    1>  
    1>  compilation aborted for foo.cpp (code 2)
    

  • Mod

    I call Boolshit! Wird ein Bug sein.

    Versuch mal ein privates Typedef base = base_class<10> zu machen und über den Zugreifen.



  • Nope, will er trotzdem nicht machen.



  • Das Beispiel funktioniert bei mir auch ohne Probleme. Was für einen Compiler benutzt du?



  • Okay, dann wirds wahrscheinlich am Compiler liegen. Ich nutze den 14er Intel Compiler.



  • Nimm mal das <10> aus dem Aufruf raus, also base_class::foo();



  • Dammit. Ich habe ein komplett neues Projekt aufgesetzt und jetzt gehts, mit dem Standard Microsoft, sowie dem Intel Compiler 13 & 14.
    Aber in dem Projekt, wo ichs brauche läufts nachwievor nicht. Fällt euch auf Anhieb eine Compiler- oder Linkereinstellung ein, an der sowas liegen könnte?



  • Kann es sein, dass du ein Unicode-Zeichen drin hast?



  • Ohhhhh das wars -.-' Wie auch immer das da rein gekommen sein mag. Weil es wurde nix kopiert oder eingefügt und schon gar nicht außerhalb vom Visual Studio bearbeitet...

    Danke schön 🙂


Anmelden zum Antworten