奇怪,"E2126 Case bypasses initialization of a local variable"是什么意思啊?

rocsoar 2001-06-29 03:42:58
错误出现在switch与case选择的时候,case 1没错, case2和 case 3的时候就报错了,为什么呢?
...全文
1426 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
孩皮妞野 2001-06-29
  • 打赏
  • 举报
回复
没有这样的规定。
不过C++中对跳转语句跳过临时变量有一些限制, 具体我也不是太了解。
所以要不然你不用跳转, 要不然把它声明在 前面。
{
int i;
if(i)goto aaa;
int j=5;
aaa:
}
上面不行, 下面可以:

{
int i,j;
if(i)goto aaa;
j=5;
aaa:
}
rocsoar 2001-06-29
  • 打赏
  • 举报
回复
谢谢ALING和TR了,就是变量应该在switch外赋值,这是固定的规定吗?我怎么没看到过?
孩皮妞野 2001-06-29
  • 打赏
  • 举报
回复
改成这样,你看有没有少点什么功能:


{
AnsiString S =Edit1->Text;
if(S.IsEmpty())
{
MessageBoxA(NULL,"请输入!",NULL,MB_OK);
return;
}
AnsiString Page(WebPage.SearchPage);
AnsiString Parm=AnsiString("/")
switch(x)
{
case 1:
Parm += WebPage.SearchJsp;
break;
case 2:
Parm += WebPage.ReplaceJsp;
break;
case 3:
Parm += WebPage.ListJsp;
break;
}
ExecIE(Handle,Page.c_str());
}
//---------------------------------------------------------------------------




孩皮妞野 2001-06-29
  • 打赏
  • 举报
回复
改成这样,你看有没有少点什么功能:


{
AnsiString S =Edit1->Text;
if(S.IsEmpty())
{
MessageBoxA(NULL,"请输入!",NULL,MB_OK);
}
AnsiString Page(WebPage.SearchPage);
AnsiString Parm=AnsiString("/")
switch(x)
{
case 1:
Parm += WebPage.SearchJsp;
break;
case 2:
Parm += WebPage.ReplaceJsp;
break;
case 3:
Parm += WebPage.ListJsp;
break;
}
ExecIE(Handle,Page.c_str());
}
//---------------------------------------------------------------------------


rocsoar 2001-06-29
  • 打赏
  • 举报
回复
okok.
谢谢两位,源码如下:
int x;
void __fastcall TfrmEStock::Button1Click(TObject *Sender)
{
x=1;
}
//---------------------------------------------------------------------------
void __fastcall TfrmEStock::Button2Click(TObject *Sender)
{
x=2;
}
//---------------------------------------------------------------------------
void __fastcall TfrmEStock::Button3Click(TObject *Sender)
{
x=3;
}
//---------------------------------------------------------------------------
void __fastcall TfrmEStock::Edit1KeyDown(TObject *Sender,
WORD &Key, TShiftState Shift)
{
switch(x)
{
case 1:
AnsiString S =Edit1->Text;
if(S!= "")
{
AnsiString Page(WebPage.SearchPage);
AnsiString Parm=AnsiString("/")+AnsiString(WebPage.SearchJsp);
ExecIE(Handle,Page.c_str());
}
else
{
MessageBoxA(NULL,"请输入!",NULL,MB_OK);
}
break;
case 2:
AnsiString s =Edit1->Text;
if(s != "")
{
AnsiString Page(WebPage.SearchPage);
AnsiString Parm=AnsiString("/")+AnsiString(WebPage.ReplaceJsp);
ExecIE(Handle,Page.c_str());
}
else
{
MessageBoxA(NULL,"请输入!",NULL,MB_OK);
}
break;
case 3:
AnsiString s =Edit1->Text;
if(s != "")
{
AnsiString Page(WebPage.SearchPage);
AnsiString Parm=AnsiString("/")+AnsiString(WebPage.ListJsp);
ExecIE(Handle,Page.c_str());
}
else
{
MessageBoxA(NULL,"请输入!",NULL,MB_OK);
}
break;
}
}
TR@SOE 2001-06-29
  • 打赏
  • 举报
回复
你在switch...case的case处理段中试图声明只对该case段有效的变量,这是不允许的(不要问我为什么,我也不知道)。

你应该将这些变量在switch...case段之外声明。
BCB 2001-06-29
  • 打赏
  • 举报
回复
也遇到过
孩皮妞野 2001-06-29
  • 打赏
  • 举报
回复
比如:
.....
if(x) goto aaa;

int i = 5;
...
aaa:


会产生:
[C++ Error] Unit1.cpp(38): E2203 Goto bypasses initialization of a local variable

这两种错误大体相似。
孩皮妞野 2001-06-29
  • 打赏
  • 举报
回复
这是一个编译错误吧, 要调整一下你的代码, 你还是把:
switch(...){....}部分贴出来看一看吧。

13,822

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧