Instanzieren von Objekten in switch-Anweisung

xkris

Mitglied
Hallo zusammen,

ich habe eine Klasse "Data" definiert. Der Konstruktor erhält als Übergabeparameter 3 Strings. Wenn ich versuche Objekte dieser Klasse innerhalb einer switch-Anweisung zu erzeugen:

Code:
switch (choice)
          {
                 case 'a':
                        Data file("blabla","blabla","blabla");
                        ...

quittiert das der Compiler (Dev cpp) mit einer Error-Meldung:

"jump to case Label crosses Initialisation of 'Data file' "

Ich kann mir nicht erklären, warum das Instanzieren hier nicht möglich ist. Wenn ich 'file' ausserhalb der switch-Anweisung instanziere klappt das einwandfrei. Ich möchte die Instanzierung aber an bestimmte Bedingungen knüpfen.
Hat jemand von euch vielleicht eine Erklärung?

Danke im Voraus

Gruß

kristian
 
Hy,

werden Objekte von Klassen nicht normalerweise mit "new" erzeugt?

Und hast du mal versucht, dein Objekt außerhalb der Schleife zu deklarieren und innerhalb dann individuell zu instanzieren? Etwa so:
C++:
char choice = 'a';
Data file = 0;
switch (choice)
   {
        case 'a':
             file = new Date("","","");
             brake;
  }

MfG
 
Hi,

also mit

>>Data file;

ausserhalb der switch Anweisung hab ich's probiert, allerdings ohne "=0".

Und der Compiler meckert auch hier. Offensichtlich wird bei der Deklaration bereits der Konstruktor aufgerufen und wenn dann nicht die entsprechenden Parameter übergeben werden funktionierts nicht.
Ich hab das Problem jetzt auch anders gelöst, trotzdem würde mich brennend interessieren wie man es umgehen kann

gruss

kristian
 
Mach einfach einen Block mit geschwungenen Klammern drumrum:

Code:
switch (choice)
          {
                 case 'a':
                        {
                             Data file("blabla","blabla","blabla");
                        ...
                        }
                        break;
                 case b:

Das Problem ist, wenn hinter case a ein case b steht. Ohne geschwungene Klammern existiert die Variable file in case b nur, wenn vorher case a durchgearbeitet wird.

Wenn case b direkt angesprungen würde, müßte ohne Klammern die Variable file eigentlich auch sichtbar sein; die Instanziierung liegt aber unter case a.

Klar könnte der Compiler jetzt file auch für case b erzeugen. Oder aber gar nicht erst für case b sichtbar machen. Das hängt aber in Fall 2 wieder davon ab, ob da ein break zwischen drin ist, oder von case a nach case b durchgefallen werden kann.

So oder so, der Compiler sieht die Sache nicht eindeutig und macht dann erst mal gar nichts.
 
Zurück