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 Fehleredit3: 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