Ich finde hier einfach nicht den Fehler[gelöst]



  • sobald ich b->setCpu(); aufrufe kommt die Meldung "|11|undefined reference to `Bauteile::setCpu()'|" wieso das?

    Danke

    #include <iostream>
    #include "bauteile.h"
    //#include "assemble.h"
    using namespace std;
    
    int main()
    {
    
        Bauteile *b = new Bauteile();
        b->setCpu();
    
        return 0;
    }
    
    /*bauteile.h*/
    #ifndef BAUTEILE_H_INCLUDED
    #define BAUTEILE_H_INCLUDED
    
    //#include "assemble.h"
    
    class Bauteile{
        private:
            enum cpu{INTEL, AMD, POWER};
            enum ram{DDR,DDR2,DDR3};
            enum gfx{PCI,AGP,PCIE};
            enum tower{DESKTOP,MIDITOWER,BIGTOWER};
            string setcpu,ram,gfx,tower;
        public:
            void setCpu();
            void setRam();
            void setGfx();
            void setTower();
    
    };
    
    #endif // BAUTEILE_H_INCLUDED
    
    /*bauteile.cpp*/
    #include <iostream>
    #include "bauteile.h"
    //#include "assemble.h"
    using namespace std;
    
    void Bauteile::setCpu(){
    
        }
    


  • zum fehler an sich:
    welche ide nutzt du?

    ansonsten:

    Bauteile *b = new Bauteile();
        b->setCpu();
    

    hier entsteht nen memory-leak ->

    Bauteile *b = new Bauteile();
        b->setCpu();
        delete b;
    

    oder noch besser:

    Bauteile b;
        b.setCpu();
    

    der header:

    string setcpu,ram,gfx,tower;
    

    da fehlt nen #include <string>
    und du hast vermutlich nen using namespace std; im header - das solltest du ändern und statt dessen std::string schreiben.

    bb



  • zum fehler an sich:
    welche ide nutzt du?

    Codeblocks unter Windows, ich bau bis her immer so meine Klassen auf und es funktionierte ohne Probleme.

    ansonsten:
    [cpp]
        Bauteile *b = new Bauteile();
        b->setCpu();
    [/cpp]
    hier entsteht nen memory-leak ->
    [cpp]
        Bauteile *b = new Bauteile();
        b->setCpu();
        delete b;
    [/cpp]
    oder noch besser:
    [cpp]
        Bauteile b;
        b.setCpu();
    [/cpp]
    

    stimmt delete vergessen, nachgeholt

    der header:

    string setcpu,ram,gfx,tower;
    

    da fehlt nen #include <string>
    und du hast vermutlich nen using namespace std; im header - das solltest du ändern und statt dessen std::string schreiben.

    <string> hat ich nicht, habs mit std:: schon verbesser gehabt, ergebnis in allem, das Selbe wie vor her



  • stimmt delete vergessen, nachgeholt

    warum überhaupt mit new und delete und nicht auf dem stack?

    codyjack schrieb:

    Codeblocks unter Windows, ich bau bis her immer so meine Klassen auf und es funktionierte ohne Probleme.

    Hmm... Aber so, wie du es dort stehen hast, müsste es stimmen - zumindest, wenn du die *.cpp dem projekt hinzugefügt hast, oder wie auch immer man das in CodeBlocks nennt...

    <string> hat ich nicht, habs mit std:: schon verbesser gehabt, ergebnis in allem, das Selbe wie vor her

    hab ja geschrieben, dass das nicht der fehler war - allerdings sollte man eben in headern keine using direktiven nutzen.
    und das include <string> brauchst du nun mal, da man sonst vor dem includieren dieser datei <string> irgendwie includieren muss - und somit relativ hässliche fehler erhalten kann...

    bb



  • weils schöner ist @heap 🙂 aber davon ab die Stack variante klappt auch nicht kommt der selbe Fehler

    edit3: es lag wirklich am Projekt, die Datei war nur im "release" eingebunden nicht im "Debug" modus...seufz wieso auch immer

    edit: Merkwürdig ich hab gerade mal nen eigenen leeren kontstruktur erstellt dann bekomm ich bereits da die Fehlermeldung, mit dem standard konst ist es kein problem sehr strange

    edit die 2.: habs btw auch mal unter linux mit gcc gebaut, selbe Meldung



  • Geh mal im Projektbaum mit einem Rechtsklick auf die Datei bauteile.cpp

    dann auf Properties/Build und sieh nach, ob die Haken bei
    "Compile file"
    "Link file"
    gesetzt sind, sowie im Fenster "Belongs in targets" die Haken bei
    "Debug"
    "Release"

    Anschließend nur die Datei bauteile.cpp erstellen: Rechtsklick auf die Datei und dann "Build file"

    Danach nochmal das ganze Projekt.



  • genau das hab ich ja bei "edit3" gemacht, danke trotzdem 🙂



  • codyjack schrieb:

    genau das hab ich ja bei "edit3" gemacht, danke trotzdem 🙂

    edit3 übersehen, sorry



  • abgesehen davon, dass es weder heap noch stack im cpp standard gibt... (nur, damit jz nich wieder so ne ewiglange diskussion kommt^^)

    weils schöner ist @heap

    mit schöner meinst du so etwas wie
    - langsamer
    - fehleranfälliger
    - memory-leaks bei exceptions

    -> wenn möglich, solltest du immer den stack vorziehen

    bb


Anmelden zum Antworten