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

21.11.2012, 11:42

Fehlermeldung c2056, ob wohl die Variabel deklariert ist

Hi,
bin der neue und absoluter Anfänger was C++ angeht.

Ich arbeite mit dem Buch: C++ für Spieleprogramierer
Compiler: Microsoft Visual C++ 2010 Express

Das Listing ist einfach nur für mich eine Übung, also fragt euch bitte nicht was das soll.

In dem Listing geht es mir Hauptsächlich um die Verschachtelung von Switch, if und for

In Zeile 47 habe ich jetzt das Problem das die Variabel i nicht als deklariert erkannt wird, wobei i doch in der
Zeile 40 deklariert wurde. (glaub ich)

Habe den Code mehrmals rauf und runter gelesen, von linke nach rechts. Doch kann ich nicht wirklich erkennen
was ich falsch gemacht habe.

Wäre echt nett wenn einer von den Profis mal über den Code schauen könnte, denn ich sehe den Wald vor lauter Baumen nicht mehr.

lg

Radnak

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
// C++ für Spieleprogramierer 
// Übung 1.0 
// verschachtelung von switch, if und for 

#include <iostream> 

using namespace std; 

// Hauptmenü 
// 
int main () 
{ 
   // Variabel 
   // 
   char Auswahl; 
   int CountdownStart; 

   // Auswahlmenue 
   cout << "(C)ountdown | (O)ptionen"; 
   cin >> Auswahl; 

   // Start switch für das Auswahlmenue 
   switch (Auswahl) 
   { 
      // Countdown? 
      case ('c'): 
      case ('C'): 
      { 
         cout << "Geben Sie den Startwert fuer den Countdown ein: "; 
         cin >> CountdownStart; 

      // Bei geraden Wert, Programm beenden 
      if (CountdownStart%2 == false) 
      { 
           cout << "Bitte nur ungerade Zahlen eingeben!" << endl; 
      } 
      else 
      { 
         // Schleife für den Countdown 
         for (int i=CountdownStart; i>=0; i--) 
         { 
             cout << "Countdown: " << i << endl; 
         } 

         // Fehlermeldung: MS Visual C++ 2010 Express 
         // error C2065: 'i': nichtdeklarierter Bezeichner 
         if (i == CountdownStart/2 +1) 
         { 
              cout << "Die Haelfte vom Counddown wurde erreicht!" << endl; 
         } 
      } 

      } break; 

   // Otionen? 
   case ('o'): 
   case ('O'): 
   { 
      cout << "Optionen gewaehlt!" << endl; 
   } break; 

   default: // mit default wird switch beendet, bei falscher Eingabe wird eine Fehlermeldung ausgegeben 
   { 
      cout << "Falsche Eingabe!" << endl; 
   } 
   } 

return 0; 
}

2

21.11.2012, 11:47

Das Problem ist, das die Variable i den Scope (Gültigkeitsbereich) verlassen hat, nach der Schleife. D.h. i existiert nur in der Schleife und dann nicht mehr. Du solltest i schon vorher deklarieren.

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

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

  • Private Nachricht senden

3

21.11.2012, 13:01

Delop hat zwar recht, allerdings ist das nicht das Problem. Der If-Block macht an der Stelle garkeinen Sinn ^^
"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?

4

21.11.2012, 14:43

Ihr habt beide recht.

Ich habe den Gültigkeitsbereich verlassen und einen wircklich Sinn hat das ganze nicht.

Mein Fehler war das ich die if-Abfrage ausserhalb der {} von der for-Schleife geschrieben habe und nicht innerhalb.

so ist es jetzt richtig:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
for (int i=CountdownStart; i>=0; i--)
    {
        cout << "Countdown: " << i << endl;
        if (i == CountdownStart/2 + 1)
        {
            cout << "Die haelfte de Countdowns ist vorbei!" << endl;
        }
    }


und so hatte ich ich es zuerst falsch gemacht:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
for (int i=CountdownStart; i>=0; i--)
    {
        cout << "Countdown: " << i << endl;
    }
    
    if (i == CountdownStart/2 + 1)
    {
        cout << "Die haelfte de Countdowns ist vorbei!" << endl;
    }


Natürlich hat dieses Programm keinen tieferen Sin, es dient mir einfach nur zu Übung und zum festigen von dem was ich bis her gelernt habe. :D

Ich Danke euch, ohne eure Hinweise hätte ich den Fehler wohl immer und immer wieder über Sehen und mir die letzten Haare auch noch ausgerissen. :D

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

5

21.11.2012, 14:46

Der Debugger hätte das Problem in wenigen Sekunden aufgezeigt - Breakpoints setzen, step over und step into benutzen.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

6

21.11.2012, 18:17

Wie denn, wenns nichmal compiled ~.~

Werbeanzeige