问题描述
为什么这不起作用?播放器写入一个数字后,它应该将它们引导回主菜单,相反,编译器给出了标签 MainMenu not defined c++
int main()
{
while (alive){
MainMenu:
}
}
void InfoPanel(){
int choice;
cout<<"1. Go back"<<endl;
cin>>choice;
if(choice==1){
goto MainMenu;
}
else{
goto MainMenu;
}
}
int MainMenuChoice;
cout<<"5.Open info panel"<<endl;
cin>>MainMenuChoice;
switch(MainMenuChoice){
case 1:
BuildingPanel();
break;
case 2:
ArmyPanel();
break;
case 3:
DiplomacyPanel();
break;
case 4:
ActionsPanel();
break;
case 5:
InfoPanel();
goto MainMenu;
break;
default:
cout<<"that doesnt seem to be correct";
goto MainMenu;
}
解决方法
来自 C++ 14 标准(3.3.5 函数范围)
1 标签 (6.1) 具有函数作用域,可以在任何地方使用 声明它们的函数。只有标签具有功能范围。
并在函数 InfoPanel
void InfoPanel(){
int choice;
cout<<"1. Go back"<<endl;
cin>>choice;
if(choice==1){
goto MainMenu;
}
else{
goto MainMenu;
}
}
标签 MainMenu
未定义。所以编译器会发出错误信息。
使用 goto 语句是个坏主意。而是在 main 中使用循环,在该循环中将调用函数 InfoPanel
。
您的 goto 不起作用,因为您的标签 MainMenu: 对于 Infopanel 功能不可见,因为它在 main 中定义并且具有范围可见性,因此它只能在主块中使用。