my code has 3 classes n_hexa,n_octa,n_bin. The code is here
switch(choice)
{
case 1: cin>>n;
n_hexa nx(n);
break;
case 2: cin>>n;
n_octa
Ebomike's post has the answer to get rid of the errors. Now the reason is,
From Standard docs 6.7.3,
It is possible to transfer into a block, but not in a way that bypasses declarations with initialization. A program that jumps77) from a point where a local variable with automatic storage duration is not in scope to a point where it is in scope is ill-formed unless the variable has trivial type (3.9) and is declared without an initializer (8.5).
An example from the Standard docs itself,
void f()
{
// ...
goto lx; // ill-formed: jump into scope of a
// ...
ly:
X a = 1;
// ...
lx:
goto ly; // OK, jump implies destructor
// call for a followed by construction
// again immediately following label ly
}
In which the statement goto lx;
is ill-formed because it is being jumped to the statement lx
, where the scope of a
is visible.
Also,
77)The transfer from the condition of a switch statement to a case label is considered a jump in this respect.
So, this applies to switch
as well.
And if braces {}
are put in them, the scope is limited to the braces and you are free to declare within each case
statement.
Hope that helps..
Try declaring the variables above the switch command:
n_hexa nx;
n_octa no;
n_bin nb;
switch(choice) {
case 1:
cin>>n;
nx(n);
break;
...
If you want to have temporary objects inside a case, you'll need to scope them properly.
switch(choice)
{
case 1:
{
cin>>n;
n_hexa nx(n);
break;
}
case 2:
{
cin>>n;
n_octa no(n);
break;
}
case 3:
{
cin>>n;
n_bin nb(n);
break;
}
}