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

Saik0

Treue Seele

  • »Saik0« ist der Autor dieses Themas

Beiträge: 171

Beruf: Anwendungsentwickler

  • Private Nachricht senden

1

25.11.2011, 15:03

C++ std::vector iterator problematik

Hallo zusammen,

ich bin ein wenig ratlos und bräuchte einen Tipp was Vectoren in C++ anbelangt.

Ich habe mehrere ALLEGRO_BITMAP* Objekte, welches jeweils ein TGA Image hat. Diese schreibe ich so in einen Vector:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
//die Bitmap
ALLEGRO_BITMAP *btm = NULL;

//vector
std::vector<ALLEGRO_BITMAP*> bitmapVec;

//bitmap laden
btm = al_load_bitmap(fileName);

//bitmap in den vector
bitmapVec.push_back(btm);


Das funktioniert auch gut aber wenn ich jetzt ganz normal über den Vector iterieren möchte

C-/C++-Quelltext

1
2
3
4
5
6
7
std::vector<ALLEGRO_BITMAP*> vec = getBitmapVec();
std::vector<ALLEGRO_BITMAP*>::iterator it;

for (it = vec.begin(); it != vec.end() ; it++) {
    ALLEGRO_BITMAP* btm = it;
    al_destroy_bitmap(btm);
}

bekomme ich nur diese Fehlermeldung:

Zitat

Fehler: »__gnu_cxx::__normal_iterator<ALLEGRO_BITMAP**, std::vector<ALLEGRO_BITMAP*, std::allocator<ALLEGRO_BITMAP*> > >« kann nicht nach »ALLEGRO_BITMAP*« in initialization umgewandelt werden

Ich verstehe nicht warum das Bitmap im Vector vom Typ ALLEGRO_BITMAP** ist und nicht wie eigentlich erwartet ALLEGRO_BITMAP* Es gibt dafür bestimmt eine einfache Lösung aber ich komme einfach nicht drauf :-\ Bin für jeden Tipp dankbar..

grüße
Saik0

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Saik0« (25.11.2011, 15:09)


David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

2

25.11.2011, 15:14

Du musst den Iterator dereferenzieren:

C-/C++-Quelltext

1
ALLEGRO_BITMAP* btm = *it;
@D13_Dreinig

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

3

25.11.2011, 15:14

Wenn du den Inhalt eines Iterators haben willst musst du ihn dereferenzieren. Schau mal genau in welcher Linie der Fehler ist, dann wirst du merken was falsch ist.

Saik0

Treue Seele

  • »Saik0« ist der Autor dieses Themas

Beiträge: 171

Beruf: Anwendungsentwickler

  • Private Nachricht senden

4

25.11.2011, 15:32

Tatsache :-\ klappt jetzt. Schau mir gleich an warum man das machen muss. Danke!

grüße
Saik0

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

Werbeanzeige