Probleme bei Projekt mit g++



  • Hallo,

    bin mit meinem Latein am Ende und hoffe hier kann mir jemand helfen...
    Ich versuche ein eigentlich recht einfaches Projekt umzusetzen und habe dazu eine Klasse mit .h und .cpp erstellt, dazu eine .cpp in der eine main() Methode implementiert ist. Mein Problem ist nun folgendes:
    Ich rufe in der main() eine Methode getValue() der Klasse Glyph auf, die in der .h deklariert und in der .cpp definiert ist und bekomme folgenden Fehler:
    undefined reference to `Glyph<int>::getValue()'

    sobald ich die Funktionsdefinition aus der glyph.cpp in die main.cpp oder in die glyph.cpp kopiere, funktioniert das ganze. Es scheint also offensichtlich an der Einbindung durch den Compiler zu liegen.
    Also habe ich eine makefile geschrieben, die alle drei Dateien compilieren und zu einem gemeinsamen output verbinden sollte. Sollte. Der Fehler bleibt der gleiche.**
    Code der glyph.cpp**

    # include "glyph.h"
    using namespace std;
    
    template <class T>
    T Glyph<T>::getValue()
    {
        return value;
    }
    

    Code der glyph.h

    #ifndef GLYPH
    #define GLYPH
    using namespace std;
    template <class T>
    class Glyph{
    	private:
    	T value;
    	Glyph *next;
    	public:
    	Glyph(T pValue){value = pValue;};
    	~Glyph(){};
    	void setNext(Glyph pNext){ next = pNext;};
    	Glyph getNext(){ return next; };
    	T getValue();
    
    };
    #endif
    

    Code der main.cpp

    #include <iostream>
    #include "glyph.h"
    using namespace std;
    
    int main()
    {
        Glyph <int> *g;
        g = new Glyph <int> (5);
        cout << g->getValue();
        return 0;
    }
    

    Auch Varianten wie g++ -Wall -c main.cpp glyph.cpp oder ähnliches funktionieren nicht.

    Bin etwas ratlos, ob es an meinem Einsatz von Templates liegt (bin neu auf dem Gebiet) oder tatsächlich irgendwas mit meiner Methode die Dateien einzubinden zu tun hat.

    Für Hilfe wäre ich dankbar!

    MfG
    Kuni




  • Mod

    Siehe auch Thread "Die meistgestellten Fragen" (oben im Forum, als "wichtig" markiert), Nummer 5.



  • Okay, vielen Dank
    schade, dachte es gibt vllt. ein angenehmeres Workaround...


Anmelden zum Antworten