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

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

11

06.02.2013, 20:57

ERROR, hast du dir meinen Code mal angeschaut?
Damit kannst du halt durch Array(x, y) auf das Array zugreifen anstatt mit [x][y].

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

12

07.02.2013, 11:46

Du solltest dir unbedingt die von David gepostetet Lösung anschauen. Wieso verschachtelte Vektoren keine gute Lösung sind, wurde hier schonmal lang und breit diskutiert... ;)

Da ich, als ich meine erste Antwort hier verfasst hab, leider gerade nicht genug Zeit für eine ausführlichere Antwort hatte, kann ich das an dieser Stelle ja nachholen:

new Tile[areaWidth, areaHeight]; erzeugt ein eindimensionales Array aus areaHeight Elementen. C++ kennt keine dynamischen mehrdimensionalen Arrays wie z.B. C#. Tile[areaWidth, areaHeight] ist in C++ einfach ein eindimensionales Array aus Objekten vom Typ Tile, dessen Größe vom Ausdruck (areaWidth, areaHeight) bestimmt wird. Der Kommaoperator entspricht in C++ einer Verkettung von Ausdrücken, die in der Reihenfolge ihres Auftretens von links nach rechts ausgewertet werden, wobei der Gesamtausdruck den Wert des letzten Teilausdrucks annimmt. (areaWidth, areaHeight) entspricht also einfach dem Wert von areaHeight.
Der Grund, wieso C++ keine mehrdimensionalen Arrays dynamischer Größe kennt, ist auch schnell erklärt: new legt einfach einen zusammenhängenden Speicherblock entsprechender Größe an, konstruiert Objekte darin und gibt einen Pointer auf das erste Element zurück. Um dynamische mehrdimensionale Arrays zu unterstützen, müsste C++ sich intern irgendwo die Abmessungen des Arrays merken, um auf die Elemente zugreifen zu können, da diese für die Addressberechnung benötigt werden. Mit anderen Worten: Man müsste genau das, was z.B. Davids Klasse macht, in die Sprache einbauen. Das widerspricht aber der Philosohpie von C++, die Sprache an sich minimal zu halten und jede komplexere Funktionalität aus diesen einfachen Mitteln zu bauen.

Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von »dot« (07.02.2013, 12:26)


ERROR

Alter Hase

  • »ERROR« ist der Autor dieses Themas

Beiträge: 417

Wohnort: Paderborn

Beruf: Informatik Student

  • Private Nachricht senden

13

07.02.2013, 12:26

Danke euch nochmal für die weiteren Erklärungen.

Ich bin jetzt dabei Davids Vorschlag umzusetzen. Bevor ich so etwas richtig einbaue, wollte ich ein eigenes Projekt anlegen um damit "rumzuspielen", weil ich so was vorher noch nicht gemacht hatte.

Habe zunächst Davids Code in eine Header Datei gemacht und diese includiert.

Beim Compilen meckert dieser dann über Fehler in dem Code.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »ERROR« (07.02.2013, 12:31)


Nimelrian

Alter Hase

Beiträge: 1 216

Beruf: Softwareentwickler (aktuell Web/Node); Freiberuflicher Google Proxy

  • Private Nachricht senden

14

07.02.2013, 13:56

Dann lies dir die Fehler durch und bügel sie aus...
Ich bin kein UserSideGoogleProxy. Und nein, dieses Forum ist kein UserSideGoogleProxyAbstractFactorySingleton.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

15

07.02.2013, 15:20

Ich habe ja geschrieben, dass der Code nicht getestet ist.
Wenn du Hilfe brauchst, poste bitte die Fehlermeldungen.

16

07.02.2013, 17:28

Zeile 28:
T& operator(size_t x, size_t y)
=> T& operator() (size_t x, size_t y)

Zeile 35:
const T& operator(size_t x, size_t y) const
=> const T& operator()(size_t x, size_t y) const

Zeile 47:
std::copy(other.p_data, other.p_data + width * height, p_data);
=> std::copy(rhs.p_data, rhs.p_data + width * height, p_data);

Zum kopieren: http://ideone.com/te1qHR


Gib beim nächsten mal trotzdem die Fehlermeldungen an.
"Theory is when you know something, but it doesn’t work. Practice is when something works, but you don’t know why. Programmers combine theory and practice: Nothing works and they don’t know why." - Anon

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

17

07.02.2013, 18:26

Danke, ich hab's gleich mal in meinem Posting korrigiert.

ERROR

Alter Hase

  • »ERROR« ist der Autor dieses Themas

Beiträge: 417

Wohnort: Paderborn

Beruf: Informatik Student

  • Private Nachricht senden

18

07.02.2013, 21:16

@David: Vielen Dank für den Code. Dass Fehler drin sind, sollte nicht angreifend klingen, habe ja gesehen dass du gesagt hast, dass er noch nicht getestet wurde.

@Steef: Danke für die Verbesserungen.


Jetzt klappt alles. Werde mich dann erstmal in die Materie der template class reinarbeiten. Nochmal vielen Dank ;)

Werbeanzeige