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

14.07.2014, 17:27

Konstante verändern (Hilfe)

Hallo, ich weiß nicht ob das hier der richtige Thread dafür ist, aber ich schreibe mein Anliegen hier mal rein.
Ich verwende das Buch C++ für Spieleprogrammierer (4. Auflage) und bin momentan bei den Konstanten angelangt. Dort steht nun mal solle mal selbst ausprobieren wenn den Wert verändert, dass man eben einen Fehler angezeigt bekommt etc. ich weiß aber irgendwie nicht so wirklich wie ich da was dran ändere.

Das hier wäre so etwas:

const int Anzahl_Levels = 11;
cout << Anzahl_Levels << endl;

ich hatte versucht mit Anzahl_Levels = Anzahl_Levels + 10; den Wert irgendwie zu verändern aber das Programm(VS 2013) hat mir dann immer das erste Anzahl_Levels rot unterstrichen.
Vielleicht habe ich auch etwas davor nicht richtig verstanden weswegen ich das hier nicht begreife.

Hoffe es kann jemand helfen.

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

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

  • Private Nachricht senden

2

14.07.2014, 17:35

Das "rote Unterstreichen" kannst du ignorieren. Es zählen die Ausgaben des Kompilers. Was sagt er denn?
"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?

3

14.07.2014, 17:35

Zitat

Dort steht nun mal solle mal selbst ausprobieren wenn den Wert verändert, dass man eben einen Fehler angezeigt bekommt


Zitat

ich hatte versucht mit Anzahl_Levels = Anzahl_Levels + 10; den Wert irgendwie zu verändern aber das Programm(VS 2013) hat mir dann immer das erste Anzahl_Levels rot unterstrichen.


Konstanten sind und bleiben unveränderlich.
EnvisionGame(); EnableGame(); AchieveGame(); - Visionen kann man viele haben. Sie umzusetzen und auf das Ergebnis stolz zu sein ist die eigentliche Kunst.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

14.07.2014, 17:36

[...] Dort steht nun mal solle mal selbst ausprobieren wenn den Wert verändert, dass man eben einen Fehler angezeigt bekommt etc. [...]

[...] aber das Programm(VS 2013) hat mir dann immer das erste Anzahl_Levels rot unterstrichen. [...]

:hmm:

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

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

  • Private Nachricht senden

5

14.07.2014, 17:37

Er meinte wohl, dass diese Zeile unterstrichen wird:

C-/C++-Quelltext

1
const int Anzahl_Levels = 11; 
"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?

6

14.07.2014, 17:37

Du gibst dir die Antwort ja schon selber:

Zitat

dass man eben einen Fehler angezeigt bekommt etc. ich weiß aber irgendwie nicht so wirklich wie ich da was dran ändere.

Wie Nachoman schon andeutet wird mit Sicherheit der Compiler damit nicht zufrieden sein.
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

7

14.07.2014, 17:50

Mit "const_cast<int&>(Anzahl_Levels) += 10;" gibt es eine einfache funktionsfähige Möglichkeit "const" auszuhebeln.
Machen sollte man das natürlich am Besten nie. ;)

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

8

14.07.2014, 17:57

Das ist in dem Fall dann sog. undefiniertes Verhalten, d.h. es kompiliert, ist aber trotzdem immer noch falsch.

9

14.07.2014, 17:59

Es geht wie gesagt darum, einmal auszutesten, wann der Compiler anfängt zu meckern und da ich nicht weiß welches eine richtige Fehlermeldung dafür wäre, frage ich hier nach.
Und ich selber wollte es so hier testen:

const int Anzahl_Levels = 11;
Anzahl_Levels = Anzahl_Levels + 10;
cout << Anzahl_Levels << endl;

und das unterstrichene zeigt er mir rot unterstrichen an. Wenn ich mit der Maus drüber fahre zeigt er: Error: Der Ausdruck muss ein änderbarer lvalue sein.
Falls ich damit den richtigen Fehler hinbekommen habe, wäre es ja gut dann. Aber mit lvalue kann ich im Moment nichts anfangen.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

10

14.07.2014, 18:06

Ein lvalue ist – vereinfacht gesagt – etwas, das links von einem = stehen kann (daher der Name), also ein modifizierbares Objekt. Eine Konstante ist kein modizifierbares Objekt... ;)

Werbeanzeige