我有这个工作代码:
/* Include files */
#include <iostream>
#include <string>
#include <limits>
using namespace std;
void fnMainMenu(char s);
/******************************************************************************
* Function: fnUpdateSalary
* Description: Update employee salary
******************************************************************************/
void fnUpdateSalary()
{
int choice = 0;
char data = 'a';
incorrect_input: // goto teleport exit :)
cout<<"\n\t=======================";
cout<<"\n\tWelcome\n";
cout<<"\t=======================\n\n";
cout<<"1. Update employee salary\n";
cout<<"2. Main menu\n";
cout<<"3. Exit system\n";
cout<<"\n >> ";
cin>>choice;
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(),'\n');
switch(choice){
case 1 :
//fnUpdateSalary();
break;
case 2 :
fnMainMenu(data);
break;
case 3 :
exit(1);
break;
default :
cout<<"Input not recognized. Please enter the correct input.\n";
}
}
void fnLog()
{
char data = 'b';
fnMainMenu(data); // call Main Menu and I want to pass "hello"
}
/******************************************************************************
* Function: fnMainMenu
* Description: Menu for the customer
******************************************************************************/
void fnMainMenu(char s)
{
cout << s;
if (s == 'a')
{ cout << "a = admin";
}
else
{cout << "\n\nb not admin";
}
//system("cls");
int chooice = 0;
cout<<"\n\t=======================";
cout<<"\n\tWelcome\n";
cout<<"\t=======================\n\n";
cout<<"1. Manage employee\n";
cout<<"2. Search employee\n";
cout<<"3. Employee report\n";
cout<<"4. Reset password\n";
cout<<"5. Exit system\n";
cout<<"\n >> ";
int numbers = 2;
cin>>chooice;
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(),'\n');
switch(chooice){
case 1 :
fnUpdateSalary();
break;
case 4 :
// fnChangePassword();
break;
default : exit(1);
}
}
/******************************************************************************
* Function: main
* Description: The main calling function
******************************************************************************/
int main()
{
fnLog();
return 0;
}
fnLog()
将b
发送给fnMainMenu()
。当我在fnUpdateSalary()
时,我想再次访问fnMainMenu()
。我的问题是,是否有fnUpdateSalary()
或任何可用的函数调用fnMainMenu()
而不再声明变量data
?我希望我可以使用fnMainMenu();
代替
char data = 'r'; fnMainMenu(data);
如果我刚刚拨打error C2660: 'fnMainMenu' : function does not take 0 arguments
fnMainMenu();
我希望我的问题有道理。提前谢谢。
答案 0 :(得分:1)
无论如何,该参数似乎没有真正的用途。将b
传递到主菜单功能当然无法实现。如果您只想区分admin和非admin访问权限,请更改参数的类型和用法:
void fnMainMenu(bool is_admin) {
if (is_admin)
cout << "Admin\n";
else
cout << "Not admin\n";
}
并称之为:
fnMainMenu(true);
// Or, alternatively:
fnMainMenu(false);
就是这样。顺便说一下,你不需要(也不应该!)声明一个变量作为参数传递给这里。只需直接传递该值,就像我上面所做的那样。
另外,为什么你的函数名称以fn
为前缀?不要这样做,这不是好习惯。只需使用适当的名称来解释函数的作用。
答案 1 :(得分:0)
由于您正在编写C ++代码并且data
在应用程序逻辑方面似乎相对较长,因此将这些函数重新组合成一个类可能是有意义的。
data
可以是此类的数据成员,也可以是fnUpdateSalary
,fnLog
,fnMainMenu
方法。
class Application {
public:
Application ()
: data ('b') // default value
{ }
void fnLog() {
data = 'b';
fnMainMenu ();
}
void fnMainMenu() {
if (data == 'a')
cout << "a = admin";
else
cout << "\n\nb not admin";
// ...
fnUpdateSalary ();
// ...
}
void fnUpdateSalary() {
// ...
fnMainMenu ();
// ...
}
private:
char data;
};
int main () {
Application app;
app.fnLog ();
}
答案 2 :(得分:0)
如果我完全理解你在做什么,你需要两件事的组合。首先,fnMainMenu中的静态变量,其次是默认参数:
fnMainMenu(char s = '\0')
{
static char c;
if(s != '\0') c = s;
...
...
}
“static”关键字表示将在函数调用中保留字符。默认参数表示将为s分配空终止字符,除非您明确传递另一个值。