Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Schorsch

Supermoderator

  • »Schorsch« ist der Autor dieses Themas

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

1

28.01.2009, 01:10

Problem mit eigener Datenstruktur

Hey.
Ich hab mir für ein Spiel eine Datenstruktur gebastelt, die so etwa wie eine "ArrayListe" funktioniert.
Also einfach eine Liste vom Typ Liste und die darin gespeicherten Listen sind vom Typ integer. Hab es ganz einfach über 2 Listen gemacht und nichts mit generics Templates etc. Das Problem ist das ich eine Funktion Init habe. Diese bekommt die größe der Liste übergeben. Also init(int x, int y). Diese erstellt die Knoten der Liste und füllt diese einfach mit dem Wert 0.

Jetzt zum eigentlichen Problem. diese Datenstruktur ist Teil einer Klasse. Die Funktion Init der Klasse soll das Init der Datenstruktur aufrufen. Und in anderen Funktionen der Klasse möchte ich darauf zugreifen können. Jedoch ist die "Liste" außerhalb der Init Funktion meiner Klasse leer. Sobald ich innerhalb der Initfunktion auf meine Liste zugreife gibt es keine Probleme. Ich hoffe ihr könnt mir sagen wie ich mein Problem lösen kann.

Habe im Header der Klasse eine Instanz der Liste angelegt und keinen Zeiger falls das euch weiterhilft.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Schorsch

Supermoderator

  • »Schorsch« ist der Autor dieses Themas

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

2

28.01.2009, 01:17

Gut ich suche jetzt seit knapp 2 1/2 Tagen an diesem Problem und da fällt mir jetzt auf einmal auf das das Init der Datenstruktur einfach nur nach dem Abfragen der Werte aufgerufen wurd weil die Funktionen falsch verschachtelt waren in der Klasse des Spiels;) und das direkt nach erstellen des Threads:D Tut mir echt leid Leute:D

Closed;)
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

3

28.01.2009, 01:20

Trotzdem noch eine Anmerkung: Wieso verwendest du keine Konstruktoren anstatt Init-Funktionen? Dann wäre immer für eine korrekte Initialisierung gesorgt.

the[V]oid

Alter Hase

Beiträge: 775

Wohnort: Aachen

  • Private Nachricht senden

4

28.01.2009, 17:38

Und wenn ein Konstruktor mal fehlschlägt, hast du ein halb initialisiertes Objekt, wirklich toll ;)
<< an dieser Stelle ist eine Signatur verstorben >>

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

5

28.01.2009, 18:39

Zitat von »"the[V«

oid"]Und wenn ein Konstruktor mal fehlschlägt, hast du ein halb initialisiertes Objekt, wirklich toll ;)


Dann hast du falsch programmiert.
Wenn etwas eine exception in dem ctor wirft, dann musst du die halt fangen und dafür Sorgen, dass der Speicher freigegeben wird, den du schon angefordert hast.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

6

28.01.2009, 19:05

Zitat von »"the[V«

oid"]Und wenn ein Konstruktor mal fehlschlägt, hast du ein halb initialisiertes Objekt, wirklich toll ;)


ne hast du nicht. wenn ein ctor fehlschlägt (und der einzige weg wie er fehlschlagen kann is ne exception), dann is kein objekt da...

Jevermeister

Treue Seele

Beiträge: 130

Wohnort: Bremerhaven

Beruf: Student

  • Private Nachricht senden

7

28.01.2009, 19:13

Trotzdem ist eine init-Methode schlechter Programmierstil.
Denk dran, all other code is evil und deine Klasse nutzen nur Anfänger, die garantiert deine Klasse aufs übelste fordern werden :badgrin:

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

8

28.01.2009, 19:28

init = schlechter Programmierstil? Interessant! Würde mich dann interessieren, wie du im c'tor z.B. dann die korrekte vtable nutzen willst. Denn was wenn man im Initialisierungsvorgang mal auf eine überladene Methode zurückgreifen muss? (muss ich ein Beispiel liefern, oder geht es auch ohne?)
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

9

28.01.2009, 19:41

...und wie man eine "lazy initialisation" realisieren will...

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

10

28.01.2009, 19:42

Zitat von »"Nox"«

init = schlechter Programmierstil? Interessant! Würde mich dann interessieren, wie du im c'tor z.B. dann die korrekte vtable nutzen willst. Denn was wenn man im Initialisierungsvorgang mal auf eine überladene Methode zurückgreifen muss? (muss ich ein Beispiel liefern, oder geht es auch ohne?)


Grundsätzlich ist es schlechter Programmierstil, wenn man einfach für jeden Mist eine Init Methode hat. Klar gibt es Ausnahmen, wie du richtig sagst gibt es Probleme, wenn man etwas spezielles an der Basisklasse machen muss (sofern man das nicht auch selbst im ctor dessen erledigen kann). Aber man sollte darauf verzichten, solange es geht und keine Angst haben davor, dass eine exception fliegt. Mit der Iinit Methode musst du dich mehr darum kümmern, dass das Objekt wieder aufgeräumt wird, als wenn du es direkt im ctor erledigst.. (eine private Init Funktion hingegen macht aber oftmals auch durchaus Sinn, um Codeverdopplung zu verhindern)

Werbeanzeige