"Undefined reference to" Problem



  • Hallo, ich habe die folgende Methode in meiner "EventManager" Klasse:

    template <class EVENT_TYPE>
    void processEvents(EventListener<EVENT_TYPE>* listener, const TypeInfo* eventType);
    

    im header

    und

    template <class EVENT_TYPE>
    void EventManager::processEvents(EventListener<EVENT_TYPE>* listener, const TypeInfo* eventType) {
    	for(EventContainer::iterator it = events.begin(); it != events.end(); it++) {
    		EventBase* event = *it;
    
    		if(event->getTypeInfo() == eventType) {
    			listener->onEvent((EVENT_TYPE*)event);
    		}
    	}
    }
    

    Und der GCC compiler sagt mir "undefined reference to processEvents(..)" an der Stelle, wo ich die Methode aufrufe. Wenn ich die ganze Methode im Header definiere, gehts komischerweise einwandfrei.. ?

    template <class EVENT_TYPE>
    void processEvents(EventListener<EVENT_TYPE>* listener, const TypeInfo* eventType) {
    	for(EventContainer::iterator it = events.begin(); it != events.end(); it++) {
    		EventBase* event = *it;
    
    		if(event->getTypeInfo() == eventType) {
    			listener->onEvent((EVENT_TYPE*)event);
    		}
    	}
    }
    

  • Administrator

    Sergesinner schrieb:

    Wenn ich die ganze Methode im Header definiere, gehts komischerweise einwandfrei.. ?

    Du kannst bei Templates die Deklaration und Definition nicht in Header und Übersetzungseinheit aufteilen. Es muss alles im Header stehen. Es gibt auch böse Tricks, wo man dann die *.cpp im Header inkludiert. Oft nennt man diese Files dann aber nicht *.cpp .

    Gibt sehr viele Threads dazu im Forum oder Inet, einfach mal ein wenig suchen 🙂

    Grüssli





  • Öhm... sieht so aus, als könnten deine Iteratoren ruhig const sein.


Anmelden zum Antworten