You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++ switch分支调用函数提示标识符未在此作用域声明问题

问题原因

  • 核心错误是mainpage函数作用域内没有声明c、s两个对象:你当前的mainpage只通过参数传入了Admin类的对象a,调用c.customer()、s.shows()时编译器找不到对应标识符,直接报未声明错误。
  • 函数实现语法错误:你贴出的customer()、shows()是全局函数的写法,但你调用时用的是对象调用成员函数的语法,说明这两个函数应该是类的成员函数,当前的实现没有关联到对应类,就算声明了对象也会调用失败。
  • 额外潜在问题:shows()函数中用到的moviename数组、show二维数组如果未在对应作用域声明,也会触发同类报错。

解决方案

  1. 在mainpage函数的switch分支前,声明对应类的对象:
void mainpage(Admin a)
{
    // 原有时间打印、菜单打印逻辑保留
    Customer c;
    // 此处替换为shows()方法所属的实际类名
    Show s;
    
    switch(choice)
    {
        // 原有分支逻辑保留
    }
}

如果需要复用外部已初始化的c、s对象,也可以把两个对象改成mainpage的入参传入。

  1. 修正成员函数的实现语法,将全局函数关联到对应类:
// Customer类的customer成员函数实现
void Customer::customer()
{   
    int ch;
    cout<<"\nCUSTOMER PAGE";
    cout<<"\n<1> Existing Customer";
    cout<<"\n<2> Register New Customer";
    cout<<"\nEnter Your Choice : ";
    cin>>ch;
    cin.ignore();
    // 剩余原有逻辑保留
}
// 假设shows()是Show类的成员函数,替换为实际类名
void Show::shows()
{   
    int choice,time;
    char buy;
    ifstream file("Currentlyshowing.txt", ios::in);

    if (!file.is_open()) {cout<< "error open file";}

    for(int i=0; i<=5; i++)
    {
        getline(file,moviename[i]);
    }
    for(int i=0; i<=5; i++)
    {
        for(int j=0; j<=5; j++)
        {
            file>>show[i][j];
        }
    }
    // 剩余原有逻辑保留
}
  1. 额外检查:确认moviename、show两个数组是对应类的成员变量,或是已提前声明的全局变量,避免触发同类未声明报错。

内容的提问来源于stack exchange,提问作者user15457633

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 19:45:05