Klassen, Instanzen und Zeiger [gelöst]
-
Hi,
ich habe ein (Spiele-)Projekt, bei dem man in ein Inventar Gegenstände (Items) legen und auch wieder herausnehmen können soll.
Alle meine Items habe ich von einer Item-Klasse abgeleitet, als leeres Objekt habe ich bisher die Item-Klasse selbst verwendet.Am Anfang fülle ich die leeren Plätze im Inventar mit:
CItem* m_Item = new CItem;Wenn ich dann einen neuen Gegenstand (z.B. eine Gun) einfügen will, benutze ich:
m_Item = new CGun;Wenn ich das dann wieder löschen will, dachte ich es würde mit
m_Item = new CItem;gehen, dann gibt Win (beim Ausführen) aber einen Fehler aus.
Ich denke das liegt daran, dass Item die Basisklasse ist, aber wie kann ich das lösen?
Muss ich für meine unbenutzen Plätze extra ein (leeres) Item erstellen?
Oder wie löst man das Inventar mit den Gegenständen gut?
-
Zum Löschen würde ich erstmal
deleteaufrufen. Danach kannst du ein CItem anfordern, aber reicht da nicht einfach den Zeiger auf 0 zu setzen?Welcher Fehler wird ausgegeben?
Gibt der Compiler Warnungen aus?
Evtl mal ein Minimalbeispiel machen?
-
@lagalopex: Thx, aber das mit delete lief auch nicht, habe mehrere Varianten probiert.
Habe jetzt aber meinen dummen Fehler entdeckt - ich habe vergessen CItem nach dem neuen erstellen neu zu initialisieren!
Also sorry, aber ich kam echt nicht weiter, wusste ja nicht, dass es so einfach sein würde und ich es noch selbst rausfinde!

-
Ähm, du solltest aber lernen, wie das mit dem
deletefunktioniert, sonst handelst du dir Memory Leaks ein. In C++ musst du Objekte, die du mitnewanlegst, wieder manuell mitdeleteabräumen. Das ist nicht wie in Java oder C#, wo ein Garbage-Collector dir diese Arbeit abnimmt.Davon abgesehen ist "lief nicht" keine Fehlerbeschreibung.
-
Nexus schrieb:
Davon abgesehen ist "lief nicht" keine Fehlerbeschreibung.
Doch, es ist eine Fehlerbeschreibung.