multiple definition of ...



  • Schönen guten Morgen,

    leider stehe ich auf dem Schlauch und daher dieser Weg.

    Ich habe ein Template programmiert

    class specialContent : public content<QFileInfo> {...}

    das ich an zwei Stellen im weiteren Quelltext nutze. Leider gibt es nun die Fehlermeldung

    multiple definition of ...

    beim linken.

    Vielleicht hat jemand eine Idee, würde mich freuen.

    Gruß

    CASI



  • Da hast du was falsch gemacht, nämlich ... . Wenn du dein "..." ausfüllst, kann dir möglicherweise jemand helfen.



  • multiple definition of.. bedeutet, dass du eine nicht-template Definition in zwei verschiedenen Übersetzungseinheiten hast, vermutlich in einem Header, den du in mehreren .cpps direkt oder indirekt einbindest.
    Leider hast du uns keinen Code gezeigt, daher kann man dir keine genauere Antwort geben...



  • class specialContent : public content<QFileInfo> {
    
    public:
        bool operator < (specialContent than);
        bool operator > (specialContent than);
        bool operator == (specialContent the);
    
    private:
    
    }
    

    content.h
    lautet:

    template <typename t> class content {
    
    public:
        content();
        content(const content& orig);
        virtual ~content();
        bool operator < (content<t> than);
        bool operator == (content<t> the);
        void store(t the);
        t theStored ();
    
    protected:
        t stored;
    };
    

    Ziel dieser Struktur ist, einen anordnenbaren Typ zu schaffen, um ihn in einem Baum oder öhnlichem zu speichern.
    Da die Operatoren "<" und "==" vom Templateparameter t abhängen, kann ich die operatoren in der Klasse specialcontent überschreiben.

    Ich definiere in einer weiteren Datei die Funktion

    int determineDoublette(QList<specialContent> of); ,

    die auf den Elementen einer linearen Liste eine Aktion ausführen soll. Ich übergebe einen Zeiger auf diese Funktion an einen Iterator, der diese Funktion dann auf jedem gespeicherten Element aufruft.

    In dem Hauptporgramm wird eine dynamische Datenstruktur mit specialContent als template-Parameter instantiiert.

    Die Dateim main.cpp sieht also im wesentlichen so aus:

    #include "avl.h" // Ein AVL-Baum, der Listen von Elementen enthält
    #include "specialContent.h"
    #include "determineDoublette.h"
    
    int main(int argc, char *argv[])
    {
        Tree<specialContent> myAvl;
        // befüllen des Baumes
        myAvl.iterate(&determineDoublette); // aufrufen der Funktion           
                                            // determineDoublette
        return 0;
    }
    

    Die Methode iterate ist in der Klasse avl wie folgt deklariert:

    template <class T>
    class Tree {
    
    public:
    
    void iterate(int (*iterFunc) (QList<T>));
    
    ...
    
    private:
    
    }
    

    /edit pumuckl: cpp-Tags. Nächstemal bitte selbst machen!



    1. Hast du uns immernoch nicht die vollständige Fehlermeldung gezeigt. Glaskugeln sind grade ausverkauft, daher bitte die komplette Fehlermeldung.
    2. cpp-Tags benutzen (hab ich jetzt einmalig für dich erledigt)
    3. Siehts alles soweit ganz gut aus, ich sehe zumindest nicht, wo das zur multiple definition führen sollte (umso wichtiger ist deshalb die Fehlermeldung)

    Ich definiere in einer weiteren Datei die Funktion

    int determineDoublette(QList<specialContent> of); ,

    Das ist eine Deklaration. Definierst du die Funktion in einem Header und bindest sie ein? Bezieht sich die Fehlermeldung auf diese Funktion? Dann bitte Code zeigen!


Anmelden zum Antworten