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

kiba

Alter Hase

  • »kiba« ist der Autor dieses Themas

Beiträge: 327

Wohnort: NRW

Beruf: Azubi: Fach-Info. Anw.

  • Private Nachricht senden

1

15.01.2009, 20:06

2d vector probleme

Und wieder ein vector problem. ^^

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
std::vector< std::vector<Tile> > tiles;

tiles.clear();
tiles.push_back( std::vector<Tile> );  //<--error#1

for(i = 0; i < width; i++){
  tiles.push_back( std::vector<Tile> );
  for(j = 0; j < height; j++){
    tiles[i].push_back( Tile );  //<--error#2

    //tiles[i][j].set...

  }
}

(mingw)
error: expected primary-expression before ')' token
error: expected primary-expression before ')' token

Ich hätte da noch eine frage.
Ich hatte mal ein Problem mit den vector ,darin hab ich ein Spriteklasse gespeichert.
Mit glGenTextures(im Kopier/Konstruktor) und glDeleteTextures(im Destuktor).
Als ich es Renderte siehn es so als würde er die Texturen gelöscht haben.
Dann hab ich new/delete benutzt und es funktionierte alles.

Was sollte man jetzt besser benutzen
new/delete oder std::vector

DasBlub

Alter Hase

Beiträge: 802

Wohnort: Schweiz

Beruf: Programmierer

  • Private Nachricht senden

2

15.01.2009, 20:10

fehler #1 liegt daran, dass du die klammern vergessen hast:

C-/C++-Quelltext

1
std::vector<Tile>();


ich bin mir nicht ganz sicher, aber wäre für dich eine std::map nicht evtl. besser?

K-Bal

Alter Hase

Beiträge: 703

Wohnort: Aachen

Beruf: Student (Elektrotechnik, Technische Informatik)

  • Private Nachricht senden

3

15.01.2009, 20:12

Quellcode

1
tiles.push_back( std::vector<Tile> ); 


Was versuchst du an dieser Stelle zu machen?

kiba

Alter Hase

  • »kiba« ist der Autor dieses Themas

Beiträge: 327

Wohnort: NRW

Beruf: Azubi: Fach-Info. Anw.

  • Private Nachricht senden

4

15.01.2009, 20:37

einen 2d array
was soll daran falsch sein

ok hab wohl die klammern vergessen,aber jetzt stürtz das programm ab.

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

5

15.01.2009, 20:47

Dann finde mal heraus wo und zeig es uns..

K-Bal

Alter Hase

Beiträge: 703

Wohnort: Aachen

Beruf: Student (Elektrotechnik, Technische Informatik)

  • Private Nachricht senden

7

15.01.2009, 20:50

dir ist schon klar, das in dem Fall alle elemente aus dem vector, für den push_back aufgerufen wird, einmal durch den stack kopiert werden?

zum Fehler: bei Tile in push_back fehlen auch die klammern. Wegen dem Programmabsturz: nimm die Ausdrücke mal auseinander, so das du vernünftig debuggen kannst, und dann lass die stelle mal im einzelschrittmodus durchlaufen und guck vor/nach jedem schritt, ob die objekte alle in ordnung sind.

@Blub: was willst du mit ner map? er hat doch nur integrale indices (war das richtig ausgedrückt?)

ChrisJ

Alter Hase

Beiträge: 487

Wohnort: Schweich

Beruf: Schüler

  • Private Nachricht senden

8

15.01.2009, 20:57

Re: 2d vector probleme

Zitat von »"kiba"«


C-/C++-Quelltext

1
tiles[i].push_back( Tile );  //<--error#2


probiers mal mit

Quellcode

1
2
Tile a_new_tile;
tiles[i].push_back(a_new_tile);


Zitat von »"kiba"«


Mit glGenTextures(im Kopier/Konstruktor) und glDeleteTextures(im Destuktor).
Als ich es Renderte siehn es so als würde er die Texturen gelöscht haben.
Dann hab ich new/delete benutzt und es funktionierte alles.

du kannst nie wissen, wann in einem std::vector die destruktoren deiner klassen aufgerufen werden. der kopiert intern gern mal speicher hin und her.
"Don't trust your eyes: They are a hell of a lot smarter than you are"

DasBlub

Alter Hase

Beiträge: 802

Wohnort: Schweiz

Beruf: Programmierer

  • Private Nachricht senden

9

15.01.2009, 23:52

vergiss std::map wieder, ich war grad leicht verwirrt ^^

10

17.01.2009, 20:06

@ ChrisJ: wenn du ein objekt erstellst und dann übergibst, ist das eig genauso gut, wie wenn du ein Objekt durch einen expliziten aufruf des Konstruktors unmittelbar bei der Parameterübergabe erstellt, also:

C-/C++-Quelltext

1
tiles[i].push_back(Tile());

hier sollte der Compiler sogar noch eher optimieren können als bei deiner variante.[/code]

Werbeanzeige