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

1

28.02.2014, 19:51

C++/QT Vector Iterator funktioniert nicht wie gewollt

Hey,

ich habe einen Vector m in dem meine Tiles drin sind(tiles erbt von QGraphicsPixMapItem) und einen entsprechenden Iterator it. Wenn ich it jetzt benutzen möchte, beispielsweise um meiner scene ein tile hinzuzufügen wie hier:

C-/C++-Quelltext

1
2
3
4
5
6
std::vector<tile*>::iterator it;

for(it = m.begin(); it != m.end(); it++)
{
      scene->addItem(it);
}


Kriege ich folgenden Fehler:

Quellcode

1
2
3
4
5
6
Fehler: C2664: 'QGraphicsScene::addItem': Konvertierung des Parameters 1 von 'std::_Vector_iterator<_Myvec>' in 'QGraphicsItem *' nicht m”glich
with
[
    _Myvec=std::_Vector_val<std::_Simple_types<tile *>>
]
Kein benutzerdefinierter Konvertierungsoperator verfgbar, der diese Konvertierung durchfhren kann, oder der Operator kann nicht aufgerufen werden


Voher habe ich map benutzt da hat alles noch funktioniert.

Cookiezzz

Frischling

Beiträge: 91

Wohnort: Deutschland

Beruf: Schüler

  • Private Nachricht senden

2

28.02.2014, 19:56

Versuch mal

C-/C++-Quelltext

1
scene->addItem((*it));

;)

3

28.02.2014, 20:01

Jo klappt danke, könntest du mir vielleicht sagen warum das dahin muss? Und gibt es auch ne elegantere Lösung?

patrick246

Treue Seele

Beiträge: 328

Wohnort: nahe Heilbronn/BW

Beruf: TG Profil Informatik-Schüler

  • Private Nachricht senden

4

28.02.2014, 20:05

Weil du das Objekt meinst, auf das der Iterator zeigt und nicht der Iterator selber. Bei der Map hattest du einen Iterator, der auf ein std::pair gezeigt hat, den hast du dann mit it->second dereferenziert

5

28.02.2014, 20:11

Zitat


Weil du das Objekt meinst, auf das der Iterator zeigt und nicht der Iterator selber. Bei der Map hattest du einen Iterator, der auf ein std::pair gezeigt hat, den hast du dann mit it->second dereferenziert


Ah ok, danke :)

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

6

28.02.2014, 20:58

Versuch mal

C-/C++-Quelltext

1
scene->addItem((*it));

;)

Da kann man übrigens ein Klammerpaar weg lassen.
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

Thoran

Alter Hase

Beiträge: 520

Wohnort: Stuttgart

Beruf: Senior Software Engineer

  • Private Nachricht senden

7

01.03.2014, 09:36

Wenn du schon mit Qt arbeitest, warum nimmst du dann nicht die Qt Äquivalente der STL? Dort muss man dann tatsächlich denn iterator ohne * verwenden.
Mein Entwicklertagebuch
Aktuelles Projekt: Universum Espionage
Eingestellt:Spieleengine SilverCore
Organisator "Spieleentwickler Stammtisch Stuttgart"

Werbeanzeige