Templates: "multiple definition" Linkerfehler



  • Hallo zusammen!

    Mache gerade ddie ersten Gehversuche mit Templates und hab gleich die ersten Probleme:

    template <typename T>
    class trait
    {
    public:
    	static int type;
    };
    
    template<>
    int trait<int>::type = Type_Int;
    
    template<>
    int trait<double>::type = Type_Double;
    

    Leider bekomme ich Linkerfehler wegen "multiple definition" und komme nicht weiter. Habe schon Google benutzt aber keinen wirklichen Hinweis auf mein Problem gefunden. "inline" geht nicht da keine Funktionen. Es gibt auch keine extra .cpp Datei, alles im Header deklariert und definiert.

    xpjdisplay.o:(.data+0x0): multiple definition of `trait<int>::type'
    basedisplay.o:(.data+0x0): first defined here
    xpjdisplay.o:(.data+0x4): multiple definition of `trait<double>::type'
    basedisplay.o:(.data+0x4): first defined here
    xpjpanel.o:(.data+0x0): multiple definition of `trait<int>::type'
    basedisplay.o:(.data+0x0): first defined here
    xpjpanel.o:(.data+0x4): multiple definition of `trait<double>::type'
    basedisplay.o:(.data+0x4): first defined here
    

    System: Linux

    [sven@sunshine ~]$ g++ -v
    Using built-in specs.
    Target: i686-pc-linux-gnu
    Configured with: ../configure --prefix=/usr --enable-shared --enable-languages=c,c++,fortran,objc,obj-c++ --enable-threads=posix --mandir=/usr/share/man --infodir=/usr/share/info --enable-__cxa_atexit --disable-multilib --libdir=/usr/lib --libexecdir=/usr/lib --enable-clocale=gnu --disable-libstdcxx-pch --with-tune=generic
    Thread model: posix
    gcc version 4.4.0 20090526 (prerelease) (GCC)
    

    Danke im Voraus für jeglichen Hinweis 🙂



  • Die Definition der statischen Variable muss aber trotzdem in eine Source-Datei, die unabhängig vom Header nur einmal gelinkt wird. 😉


Anmelden zum Antworten