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

Teiby

Frischling

  • »Teiby« ist der Autor dieses Themas

Beiträge: 42

Beruf: Ausbildung

  • Private Nachricht senden

1

21.02.2012, 00:34

Visual Studio fehlerhaft?

Guten Tag. Ich hab gerade einen ziemlich üblen Fehler in meinem Code gehabt wodurch mein Programm dauernt abgestürzt ist. Nach langen Suchen hab ich den Fehler auch dann gefunden und wunder mich extrem das "Visual C++ 2008 Express Edition" keine Fehlermeldung gebracht hat beim Erstellen.
Der Fehler:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
EineKlasse* Zeiger = NULL;

if(x == 1)
    EineKlasse* Zeiger = GetAPointer1();
else if(x == 2)
    EineKlasse* Zeiger = GetAPointer2();

Zeiger->DoSomething(); // Crash


Wieso lässt sich "Zeiger" mehrmals deklarieren? Das normal?

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

21.02.2012, 00:39

Ja. Die Objekte namens "Zeiger" in dem if befinden sich in einem anderen Scope als der "Zeiger" draußen.
Vielleicht wird's klarer wenn ich es dir so hinschreib:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
EineKlasse* Zeiger = NULL;

if(x == 1)
{
    EineKlasse* Zeiger = GetAPointer1();  // eigenes Objekt namens Zeiger, verdeckt das äußere Objekt, existiert bis zur }
}
else if(x == 2)
{
    EineKlasse* Zeiger = GetAPointer2();  // eigenes Objekt namens Zeiger, verdeckt das äußere Objekt, existiert bis zur }
}

Zeiger->DoSomething(); // natürlich Crash

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

3

21.02.2012, 00:59

Scope heißt übrigend Gültigkeitsbereich.
Die innere Variable "überschreibt" die Variable im übergeordnetem Block.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Spiele Programmierer« (21.02.2012, 01:15)


Teiby

Frischling

  • »Teiby« ist der Autor dieses Themas

Beiträge: 42

Beruf: Ausbildung

  • Private Nachricht senden

4

21.02.2012, 04:23

Mmm okay schade.

Dann wäre auch sowas möglich:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
for(int i = 0; i < 10; i++)
    for(int i = 0; i < 10; i++)
        for(int i = 0; i < 10; i++)
            for(int i = 0; i < 10; i++)
                for(int i = 0; i < 10; i++)
                    for(int i = 0; i < 10; i++)
                        for(int i = 0; i < 10; i++)
                            for(int i = 0; i < 10; i++)
                                for(int i = 0; i < 10; i++)
                                    for(int i = 0; i < 10; i++)
                                    {
                                        SayText("lol");
                                    }

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

5

21.02.2012, 04:48

Ist es auch ;)

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

6

21.02.2012, 07:15

Gäbe es doch nur 1€ jedes Mal, wenn jemand glaubt, dass MSVC bei ihm kaputt ist und ausgerechnet er als Anfänger auf so einen Fehler trifft. :D
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]

7

21.02.2012, 13:42

Du musst den Schleifen aber unterschiedliche Variablen geben, es sollte nur eine die Variable i haben, bzw. 'i' als Name.
Dann mach es doch gleich so:

C-/C++-Quelltext

1
2
for(int i=0; i<10000000000; ++i)
SayText("lol");


MfG
Check

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

8

21.02.2012, 13:47

Du musst den Schleifen aber unterschiedliche Variablen geben, es sollte nur eine die Variable i haben, bzw. 'i' als Name.

Wieso? Genau darum ging's hier doch!?

9

21.02.2012, 13:49

Ach so, möglich als Fehler. :pillepalle:
Entschuldigung.

MfG
Check

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

10

21.02.2012, 14:01

Du hast schon recht, es ist normalerweise wohl nicht besonders sinnvoll das zu machen, aber C++ erlaubt es ;)

Werbeanzeige