Expected Templatename before "<"



  • Hi,

    obige Fehlermeldung erhalte ich beim Kompilieren meines Projekts in einer Klasse.
    Hier der Code:

    Beim erben von MessageBase<ShootMsg> meckert der Compiler.

    #include "messagebase.h"
    #include "../animationsystem.h"
    
    class ShootMsg
    :public MessageBase<ShootMsg> //<-----  Hierdrauf bezieht sich die Meldung
    {
    public:
        ShootMsg()
        :MessageBase(AnimationSystem::type)
        {}
    };
    

    MessageBase:

    #include "../system.h"
    #include "message.h"
    
    inline unsigned long getNextMessageType()
    {
       static unsigned long next = 0;
       return next++;
    }
    
    template <class T>
    class MessageBase
    :public Message
    {
    protected:
        bool _asap;              // Deliver as soon as possible (asap)
        System::id _receiver;
    public:
        static unsigned long type;
        unsigned long getType() const { return T::type; }
    
        MessageBase(System::id receiver,bool asap = false)
        :_asap(asap),_receiver(receiver)
        {}
    
        virtual unsigned long receiver() { return _receiver; }
        virtual bool          asap()     { return _asap; }
    };
    
    template <class T>
    unsigned long MessageBase<T>::type(getNextMessageType());
    

    und Message:

    class Message
    {
    public:
        virtual unsigned long getType() const = 0;
    
        virtual unsigned long receiver() { return 0; }      //0 is the value for "no receiver"
        virtual bool asap()              { return false; }  //false is default value
    };
    

    Die drei Files liegen alle im selben Ordner.
    Wieso wird MessageBase nicht als Klassentemplate (oder wars Templateklasse?) erkannt?

    Vielen Dank für eure Hilfe 🙂


  • Mod

    Includeguards vergessen?



  • SeppJ, ich danke dir hahahahahaha ohhhhh mein gott.

    Folgendes, vielleicht passiert das irgendwem nochmal:

    Ich hatte zunächst nur die Basisklasse message.h, welche ganz normal mit Includeguards erstellt wurde.
    Diese erweiterte ich dann zu messagebase.h (samt rename) OHNE die includeguards zu ändern (d.h. die lauten aktuell immernoch sinngemäß MESSAGE_H).
    Dann erstellte eine neue message.h die natürlich die selben Guards hat.

    Oh man, hahahahaha.

    Vielen Dank!


Anmelden zum Antworten