转到标签未定义 C++

问题描述

为什么这不起作用?播放器写入一个数字后,它应该将它们引导回主菜单,相反,编译器给出了标签 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 中定义并且具有范围可见性,因此它只能在主块中使用。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...