Thread View: de.comp.lang.c++
3 messages
3 total messages
Started by Dinger Dirk 3576
Thu, 24 Aug 1995 09:23
Error "jump past initializer"
Author: Dinger Dirk 3576
Date: Thu, 24 Aug 1995 09:23
Date: Thu, 24 Aug 1995 09:23
12 lines
737 bytes
737 bytes
Hallo ihr da draussen ! Gibt es jemanden unter Euch, der mit der Fehlermeldung "Jump past initializer" etwas anfangen kann. Es muss irgendetwas damit zu tun haben, wenn man den Konstruktor eines Objekts innerhab einer switch/case Struktur aufruft, aber ich kann mir das nicht erklaeren. Dirk Dinger
Re: Error "jump past initializer"
Author: Ullrich von Bassewitz
Date: Thu, 24 Aug 1995 18:34
Date: Thu, 24 Aug 1995 18:34
67 lines
2288 bytes
2288 bytes
Dinger Dirk 3576 (dinger@ens.ascom.ch) wrote:
> Gibt es jemanden unter Euch, der mit der Fehlermeldung
> "Jump past initializer" etwas anfangen kann.
Ja, sowas aehnliches bekomme ich oefter (und aergere mich ueber C++ :-).
Du bekommst das bei Konstrukten wie
switch (X) {
case 3:
unsigned I = 1;
if (A == B) {
// Some code
}
break;
case 4:
// ...
}
I ist im kompletten umschliessenden Block gueltig (das ist das Switch-
Statement), die Initialisiuerung wird aber u.U. nicht ausgefuehrt. Wenn Dein
Compiler das nur bei "richtigen" Objekten bringt, dann hast Du Glueck gehabt.
Wenn er die Meldung auch bei den Grundtypen bringt (wie meine(r)), dann ist
das irgendwie Unfug, vor allem wenn man sich mal anschaut, wie man die Sache
loesen kann:
case 3:
unsigned I;
I = 1;
if (A == B) {
// Some code
}
break;
Wird die Variable nicht mehr direkt initialisiert, dann beschwert sich
zumindest mein Compiler nicht mehr.
Andere Loesungsmoeglichkeiten sind:
* Variablendeklaration komplett aus dem Block rausziehen.
* Nach "case" einen neuen Block anfangen:
case 3:
{
unsigned I = 1;
if (A == B) {
// Some code
}
}
break;
Nach dem Sichtbarkeitsregeln von C++ ist die Fehlermeldung verstaendlich,
trotzdem finde ich das Verhalten idiotisch, vor allem deshalb, weil die
einfachste Abhilfe die Deklaration ohne gleichzeitige Intialisierung ist -
und davon wollte Stroustrup in C++ ja eigentlich wegkommen.
Gruss
Uz
--
Ullrich von Bassewitz uz@ibb.schwaben.com
Re: Error "jump past initializer"
Author: Bernd Eggink
Date: Fri, 25 Aug 1995 08:24
Date: Fri, 25 Aug 1995 08:24
80 lines
3080 bytes
3080 bytes
Ullrich von Bassewitz (uz@wuschel.ibb.schwaben.com) wrote:
> Dinger Dirk 3576 (dinger@ens.ascom.ch) wrote:
> > Gibt es jemanden unter Euch, der mit der Fehlermeldung
> > "Jump past initializer" etwas anfangen kann.
> Ja, sowas aehnliches bekomme ich oefter (und aergere mich ueber C++ :-).
> Du bekommst das bei Konstrukten wie
> switch (X) {
> case 3:
> unsigned I = 1;
> if (A == B) {
> // Some code
> }
> break;
> case 4:
> // ...
> }
> I ist im kompletten umschliessenden Block gueltig
Genauer gesagt, ab Deklaration...
> (das ist das Switch-
> Statement), die Initialisiuerung wird aber u.U. nicht ausgefuehrt. Wenn Dein
> Compiler das nur bei "richtigen" Objekten bringt, dann hast Du Glueck gehabt.
> Wenn er die Meldung auch bei den Grundtypen bringt (wie meine(r)), dann ist
> das irgendwie Unfug, vor allem wenn man sich mal anschaut, wie man die Sache
> loesen kann:
> case 3:
> unsigned I;
> I = 1;
> if (A == B) {
> // Some code
> }
> break;
> Wird die Variable nicht mehr direkt initialisiert, dann beschwert sich
> zumindest mein Compiler nicht mehr.
> Andere Loesungsmoeglichkeiten sind:
> * Variablendeklaration komplett aus dem Block rausziehen.
> * Nach "case" einen neuen Block anfangen:
> case 3:
> {
> unsigned I = 1;
> if (A == B) {
> // Some code
> }
> }
> break;
Das sollte man sich meiner Meinung nach sowieso zur Gewohnheit machen.
> Nach dem Sichtbarkeitsregeln von C++ ist die Fehlermeldung verstaendlich,
> trotzdem finde ich das Verhalten idiotisch, vor allem deshalb, weil die
> einfachste Abhilfe die Deklaration ohne gleichzeitige Intialisierung ist -
> und davon wollte Stroustrup in C++ ja eigentlich wegkommen.
Das Verhalten der Compiler zeigt nur, dass sie sich noch nicht
nach dem neuesten Standard richten. Der legt naemlich genau das fest,
was Du Dir wuenschst: Es ist _erlaubt_, Deklarationen zu ueberspringen,
sofern es sich um arithmetischen oder Pointer-Typen ohne Initialisierung
handelt (6.7, Vers 3).
Gruss
Bernd
--
+----------------------------------+
| Bernd Eggink |
| Rechenzentrum Uni Hamburg |
| admin@rzaix13.rrz.uni-hamburg.de |
+----------------------------------+
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads