[C++] for(auto it : mlist) Problem

07/09/2014 15:13 MaBarker#1
Hey,
Ich versuche mich gerade damit bei C++ an einem kleine Spiel über SFML.
Ich lerne es gerade anhand eines bzw. mehrere Videos bzw. Tutorials.


Ich habe jedoch das Problem das in dem Tutorial eine Methode genutzt wird die ich nicht nutzen kann da sie meines wissen für die Visual Studio 11 Version genutzt werden kann und ich habe die version 10.

Es handelt sich um folgendes beispielsweise folgendes Problem:

Code:
void AsteroidManager::update(float frametime)
{
	for(auto it : mList)
	{
		it->update(frametime);
	}
}
Ich kann die schleife nicht nutzen bzw. das auto it : mList.
Die mList habe ich bereits in einer anderen klasse definiert (in dem Fall eine liste der Bots (asteroiden in dem Spiel.))

Tutorial auf welches die Frage bezogen ist:

Stelle: 6.26 Minute
07/09/2014 15:34 th0rex#2
Quote:
Originally Posted by MaBarker View Post
Tutorial auf welches die Frage bezogen ist:
Sehe da jetzt keine Frage.
Aber du kannst es mal so versuchen.
Code:
for(std::vector<typDerKlasse>::iterator it = mList.begin(); it != mList.end(); ++it)
{
    it->update(frameTime);
}
07/09/2014 15:40 MaBarker#3
Danke jedoch habe ich nun die meldung das keine Benutzerdefinierte Konvertierung vorhanden sei ? o.O
07/09/2014 15:41 th0rex#4
Du musst auch schreiben std::vector<TYPDENDERVEKTORSPEICHERT>::iterator und nicht meins kopieren. Also der Typ der in mList gespeichert wird.
07/09/2014 15:44 MaBarker#5
hab ich gemacht keine sorge ^^
Kommt trzd. der fehler.
07/09/2014 15:45 th0rex#6
Dann zeig doch mal die deklaration von dem vector (mList) und den code den du hast. Ohne den kann ich dir schlecht weiter helfen.
07/09/2014 15:48 MaBarker#7
Ich adde dich mal kurz in skype ok ? ^^ xd
07/09/2014 16:20 MrSm!th#8
Du kannst es auch einfach hier posten.
07/09/2014 16:28 Mostey#9
Sieht nicht so aus als ob der Typ in dem Video Ahnung hätte. Er sagt, das der Datentyp zur Laufzeit erkannt wird (sofern man auto nutzt), fährt 2 Sekunden danach über die Variable, sieht den erkannten Datentypen und erwähnt sogar noch, das der nun erkannt wurde. Bestätigt nun wiedermal die Qualität von YouTube Tutorials.

€: Gut, er hat teilweise stark improvisiert weil er das Feature nicht einmal kannte, bevor er es genutzt hat aber da sollte er sich vorher trotzdem informieren.

Zudem würde ich hier zu auto& raten, sofern es angebracht ist. Dann sparst du dir nämlich auch die Kopiererei.

Ansonsten kannst du auch omitma's Methode nutzen, wobei ich das allerdings nur benutze, wenn ich den iterator irgendwann in der Schleife mal brauche (für std::vector<T>::erase(it) zum Beispiel).
07/09/2014 16:59 MaBarker#10
Yo ich hab mit omitma jz geschrieben und er hat mir geholfen ^^ :)
Aufjedenfall klappt es jz.

Wär nett wenn wer den Thread closen könnte :p ^^
07/10/2014 02:22 Delinquenz#11
Quote:
Zudem würde ich hier zu auto& raten, sofern es angebracht ist. Dann sparst du dir nämlich auch die Kopiererei.
Wenn man schon eine Referenz benutzt, dann sollte sie auch gleich, sofern nicht anders benötigt, const sein. auto& suggeriert, dass da was verändert wird. const auto& nicht.

Quote:
Ansonsten kannst du auch omitma's Methode nutzen, wobei ich das allerdings nur benutze, wenn ich den iterator irgendwann in der Schleife mal brauche (für std::vector<T>::erase(it) zum Beispiel).
Welche Alternativen schlägst du vor, wenn kein C++11 vorhanden ist?
07/10/2014 14:47 Mostey#12
Quote:
Originally Posted by Delinquenz View Post
Wenn man schon eine Referenz benutzt, dann sollte sie auch gleich, sofern nicht anders benötigt, const sein. auto& suggeriert, dass da was verändert wird. const auto& nicht.
Eine Update Methode "suggeriert" aber, das etwas verändert wird. const wäre an dieser Stelle nicht angebracht.


Quote:
Originally Posted by Delinquenz View Post
Welche Alternativen schlägst du vor, wenn kein C++11 vorhanden ist?
[Only registered and activated users can see links. Click Here To Register...]

Ist ja nicht so, als ob es keine anderen Möglichkeiten vor C++ 11 gegeben hätte.
07/10/2014 16:14 Delinquenz#13
Quote:
Eine Update Methode "suggeriert" aber, das etwas verändert wird. const wäre an dieser Stelle nicht angebracht.
Hm, dann ergibt der Ausgangscode keinen Sinn, mein Fehler.

Quote:
Ist ja nicht so, als ob es keine anderen Möglichkeiten vor C++ 11 gegeben hätte.
Hast du dir den Link mal angeschaut? Da sind keine gescheiten Alternativen, es sei denn, du empfindest eine "Random Access" Iteration als gescheit.
07/10/2014 17:18 Mostey#14
Quote:
Originally Posted by Delinquenz View Post
Hast du dir den Link mal angeschaut? Da sind keine gescheiten Alternativen, es sei denn, du empfindest eine "Random Access" Iteration als gescheit.
Bleibt ja wohl keine andere Möglichkeit, oder? Wenn du weißt wie es besser geht, kannst du uns gerne aufklären.

Ich sehe übrigens kein Problem in den Beispielen, die dort geposted wurden.
07/10/2014 18:59 MrSm!th#15
Quote:
Bleibt ja wohl keine andere Möglichkeit, oder?
Doch, Iteratoren.