0

私はこの作業コードを持っています:

/* 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()に送信bfnMainMenu()ます。行ったらまたfnUpdateSalary()行きたいですfnMainMenu()。私の質問は、変数を再度宣言せずfnUpdateSalary()に呼び出すことができる関数があるかどうかです。代わりに 使用できることを望んでいましたfnMainMenu()datafnMainMenu();

char data = 'r'; fnMainMenu(data);

error C2660: 'fnMainMenu' : function does not take 0 arguments呼び出したばかりの場合、このエラーが発生しますfnMainMenu();

私の質問が理にかなっていることを願っています。前もって感謝します。

4

3 に答える 3

1

とにかく、パラメーターは本当の目的を果たしていないようです。メインメニュー機能に渡しbても、確かに何も達成されません。管理者アクセスと非管理者アクセスを区別したいだけの場合は、引数のタイプと使用方法を変更します。

void fnMainMenu(bool is_admin) {
    if (is_admin)
        cout << "Admin\n";
    else
        cout << "Not admin\n";
}

そして、次のように呼び出します。

fnMainMenu(true);
// Or, alternatively:
fnMainMenu(false);

それでおしまい。ちなみに、ここで引数として渡す変数を宣言する必要はありません (すべきではありません!)。上で行ったように、値を直接渡すだけです。

また、関数名の前に が付くのはなぜfnですか? これをしないでください。良い習慣ではありません。関数が何をするかをよく説明する適切な名前を使用してください。

于 2012-12-02T19:57:39.147 に答える
0

あなたが書いているのは C++ コードでdata、アプリケーション ロジックに関しては比較的寿命が長いように思われるため、これらの関数をクラスに再グループ化することはおそらく理にかなっているでしょう。

dataは、このクラスのデータ メンバーでありfnUpdateSalary、 、fnLogfnMainMenuメソッドである可能性があります。

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 ();
}
于 2012-12-02T19:43:35.810 に答える
0

あなたが何をしているのかを完全に理解するなら、あなたは2つのことを組み合わせる必要があります. 1 つ目は fnMainMenu の静的変数、2 つ目はデフォルト パラメータです。

fnMainMenu(char s = '\0')
{
  static char c;
  if(s != '\0') c = s;
  ...
  ...
}

「静的」キーワードは、関数呼び出し間で文字が保持されることを意味します。デフォルト パラメータは、別の値を明示的に渡さない限り、s にヌル終了文字が割り当てられることを意味します。

于 2012-12-02T19:44:08.630 に答える