C++ switch分支调用函数提示标识符未在此作用域声明问题
问题原因
- 核心错误是
mainpage函数作用域内没有声明c、s两个对象:你当前的mainpage只通过参数传入了Admin类的对象a,调用c.customer()、s.shows()时编译器找不到对应标识符,直接报未声明错误。 - 函数实现语法错误:你贴出的
customer()、shows()是全局函数的写法,但你调用时用的是对象调用成员函数的语法,说明这两个函数应该是类的成员函数,当前的实现没有关联到对应类,就算声明了对象也会调用失败。 - 额外潜在问题:
shows()函数中用到的moviename数组、show二维数组如果未在对应作用域声明,也会触发同类报错。
解决方案
- 在
mainpage函数的switch分支前,声明对应类的对象:
void mainpage(Admin a) { // 原有时间打印、菜单打印逻辑保留 Customer c; // 此处替换为shows()方法所属的实际类名 Show s; switch(choice) { // 原有分支逻辑保留 } }
如果需要复用外部已初始化的c、s对象,也可以把两个对象改成mainpage的入参传入。
- 修正成员函数的实现语法,将全局函数关联到对应类:
// 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]; } } // 剩余原有逻辑保留 }
- 额外检查:确认
moviename、show两个数组是对应类的成员变量,或是已提前声明的全局变量,避免触发同类未声明报错。
内容的提问来源于stack exchange,提问作者user15457633
相关产品推荐
相关产品推荐

