KDevelop & QValueVector [SOLVED]



  • Hallo,

    ich entwickle mit KDevelop ein kleines Prog unter Verwendung der KDE-Headers und QT.

    Hab mir eine Klasse geschrieben, die in einen QValueVector aufgenommen werden soll. Ich erhalte aber immer:

    /usr/qt/3/include/qvaluevector.h:76: undefined reference to `Project::~Project [in-charge]()'
    

    (ist im destruktor von QValueVector)

    meine Klasse sieht so aus:

    #ifndef PROJECTSETT_H
    #define PROJECTSETT_H
    
    #include <qvaluevector.h>
    #include <qstring.h>
    
    class Project
    {
        private:
            QString projectName;
    
        public:
            Project();
            Project(QString projectName) : projectName(projectName) {};
            ~Project();
            QString getName();
    };
    
    typedef QValueVector<Project> ProjectSet;
    
    #endif
    

    dazu gibts natürlich noch eine .cpp datei, in der Project::Project, Project::~Project und Project::getName implementiert sind.

    Meine Frage: ist an diesem Code irgendwas falsch, oder warum erhalte ich diese Meldung? "in-charge" hatte ich immer, wenn KDevelop ein File nicht finden konnte. Ich seh aber am Compileroutput, dass diese Datei compiled wird. Weiters gibt es den obigen Code nochmal mit "Company" anstelle von "Project" und da funktioniert alles.
    Die Dateien sollten richtig im Automake drinnen sein. Eigentlich ist alles so, wei bei "Company". Mit "Company" funktioniert es, aber mit "Project" nicht.

    Hat jmd. eine Idee?

    danke im voraus!

    PS: wenn der code erwünscht ist post ich ihn - was ich ungern tu, da es mein erstes c++ projektlein ist 🙂



  • Hast du den Destruktor von Project auch implementiert, oder nur deklariert?



  • hallo,

    wie gesagt: ist implementiert

    hier mal der code - ich glaub ich bin schon komplett hinüber und da is was falsch 🙂

    Project::~Project()
    {
        delete projectName;
    }
    

    wobei "projectName" ein private QString ist. den darf ich doch zerstören oder? naja, habs auch schon ohne probiert 🙂

    danke!



  • Nein den darfst du so nicht deleten. Denn das ist kein Zeiger. Der Compiler hätte auch eine Fehlermeldung bringen müssen, denn soweit ich weiss läßt sich ein QString nicht in einen Zeiger automatisch casten.

    Entweder du nimmst die Zeile raus, oder du nimmst den ganzen Destruktor raus, da er nichts macht bisher.



  • hallo again,

    hab jetzt mal den destruktor "virtual" definiert:

    virtual ~Project();
    

    und es funktioniert!!! 🙂 bin sicher 6h an diesem problem gehangen!

    aber warum gehört das so? und warum funktioniert es mit "Company" auch ohne "virtual"?

    thx

    //EDIT: hab auch das "delete" rausgenommen! thx! is wirklich kein zeiger 😞



  • sorry, zu früh gefreut.
    das funktioniert doch nicht.

    der Fehler bleibt.
    jetzt erhalte ich den Fehler bei:

    projVec->push_back(Project(e.attribute("name")));
    

    wobei projVec ein ProjectSet Zeiger ist.

    danke wiedermal



  • halloa,

    jetzt funktionierts. kA wieso. lag auf alle Fälle an KDevelop & den Make Einstellungen...

    danke.

    ciao


Anmelden zum Antworten