Kai A. schrieb:
> Ich verstehe nicht warum Beispiel 1 nicht funktioniert. Wie funktioiert
> auto?
>
> Beispiel 1:  for (auto it_NLevel : NLevel)
>   {
>     it_NLevel->setTlevel(20.0);
>     it_NLevel->setTconv(0.0);
>     it_NLevel->setHeight(CalculateLevelHeight());
>     it_NLevel->setVolume(CalculateLevelVolume());
>   }
>
> Beispiel 2:
>   for (auto& it_NLevel : NLevel)
>   {
>     it_NLevel.setTlevel(20.0);
>     it_NLevel.setTconv(0.0);
>     it_NLevel.setHeight(CalculateLevelHeight());
>     it_NLevel.setVolume(CalculateLevelVolume());
>   }
Lassen wir erst mal 'auto' aus dem Spiel. Dann würdest du so schreiben 
müssen, damit es funktioniert (ich lass das 'it_' mal weg, weil das ist 
schon die nächste Verwirrung):1  | for (Level& l : NLevel)
  | 
2  | {
 | 
3  |   l.setTlevel(20.0);
  | 
4  |   //...
  | 
5  | }
  | 
Die Variable 'l' ist hier nicht ein Iterator, der auf ein Element zeigt, 
sondern wird für jeden Schleifendurchlauf mit dem Element des Containers 
Nlevel initialisiert. Im Hintergrund wird tatsächlich ein Iterator 
dereferenziert.
Jetzt willst du beim Initialisieren ja, dass du die Elemente im Vektor 
beschreibst. Daher darf die Initialisierung von 'l' für den aktuellen 
Schleifendurchlauf nicht eine Kopie erzeugen. Daher deklarieren wir 'l' 
als Referenz (das '&' davor). Dadurch wirkt der 'setTlevel'-Aufruf auf 
das Element im Container, und nicht auf eine Kopie davon.
Würdest du jetzt schreiben:
1  | for (Level l : NLevel)
  | 
2  | {
 | 
3  |   l.setTlevel(20.0);
  | 
4  |   //...
  | 
5  | }
  | 
(ohne Referenz), dann wird 'l' immer mit einer Kopie des 
Container-Elements initialisiert, und 'setTlevel' wirkt auf die Kopie 
und nicht auf das Element im Container.
Schreibst du jetzt aber sogar
1  | for (Level l : NLevel)
  | 
2  | {
 | 
3  |   l->setTlevel(20.0);
  | 
4  |   //...
  | 
5  | }
  | 
dann mault der Compiler, weil der Typ 'Level' kein Pointer ist und auch 
keinen operator-> definiert hat.
Das hat bisher alles nichts mit 'auto' zu tun, und 'auto' ändert auch 
nichts an den Fehlersituationen. In deinen beiden Beispielen bewirkt es 
nur, dass der Compiler sich den Typ der Container-Elemente ('Level') 
selbst ausrechnen soll.