case でローカル変数の初期化がとばされた


kuri  2003-12-17 21:38:59  No: 6260  IP: [192.*.*.*]

case でローカル変数の初期化がとばされた というエラーがでてしまいます。
ヘルプで見ると、C++だろうがswitch内で初期化はできないだろと書いてあります。これってどういうことでしょうか?

編集    削除
にしの  2003-12-17 21:54:24  No: 6261  IP: [192.*.*.*]

それだけではわかりません。
どういうことかと言われれば、ヘルプに書かれているとおりとしかいえません。

編集    削除
kuri  2003-12-18 02:01:02  No: 6262  IP: [192.*.*.*]

下のプログラムです。ペコm(_ _;m)三(m;_ _)mペコ
MSG_CON_EXE_CLIENTやMSG_CON_EXE_SERVERはヘッダーで定義されています。

switch( ExeID ){
       case MSG_CON_EXE_CLIENT:
                 AnsiString account = message->ReadText();
                AnsiString password = message->ReadText();
                long userID;

                break;

       case MSG_CON_EXE_SERVER:
          
                break;
       case 2:
                int result=2;

        default:
             AppUserLoginProc(Socket, result, ExeID, AppVer, fromUserID, fromGroupID);

            
          break;
    }

編集    削除
にしの  2003-12-18 02:09:56  No: 6263  IP: [192.*.*.*]

例えば、case 2に書かれているint result=2;は、switch文を抜けると使えませんよ。
switchの前に定義しておく必要があります。
同じく、accountとpasswordも。

編集    削除
にしの  2003-12-18 02:20:18  No: 6264  IP: [192.*.*.*]

念のため。

#include<stdio.h>
#include<stdlib.h>

int main()
{
  int a = 1;
  {
    int a = 2;
    printf("a=%d\n", a);
  }
  printf("a=%d\n", a);

  return 0;
}
この実行結果が、
a=2
a=1
となることはわかりますか?



#include<stdio.h>
#include<stdlib.h>

int main()
{
  {
    int a = 2;
    printf("a=%d\n", a);
  }
  printf("a=%d\n", a);

  return 0;
}
この場合に、コンパイルエラーが出る理由はわかりますか?

編集    削除
kuri  2003-12-18 02:23:11  No: 6265  IP: [192.*.*.*]

(‾∧‾)(_ _)フムフム・・・

Switch文の中で定義した変数は、その中でしか使えないんですね。
ローカル変数の初期化がとばされたというかき回しはちょっとなっとくできません。

編集    削除