0

意味のわからない問題に遭遇しましたが、パラメーターを使用して解決しました。基本的に、これはうまくいきました:

void Inventory:: showInventory(char input)
{
    //char input[80];
    //cin >> input;
    //char inventoryRequest[] = "i";
    //int invent = strcmp (input,inventoryRequest);
    //compare the player input to inventoryRequest (i) to see if they want to look at inventory.
    if(input == 'i')
    {
    cout<< "\nYou have " << inventory.size() << " items.\n";
    cout << "----------------Inventory----------------\n";
    cout<< "\nYour items:\n";
    for (int i= 0; i< inventory.size(); ++i)
        cout<< inventory[i] << endl;
    }
    cout << "\n-----------------------------------------\n\n\n";


}

これではなく:

void Inventory:: showInventory()
{
         char input;
    //char input[80];
    //cin >> input;
    //char inventoryRequest[] = "i";
    //int invent = strcmp (input,inventoryRequest);
    //compare the player input to inventoryRequest (i) to see if they want to look at inventory.
    if(input == 'i')
    {
    cout<< "\nYou have " << inventory.size() << " items.\n";
    cout << "----------------Inventory----------------\n";
    cout<< "\nYour items:\n";
    for (int i= 0; i< inventory.size(); ++i)
        cout<< inventory[i] << endl;
    }
    cout << "\n-----------------------------------------\n\n\n";


}

基本的にはこれと同じだと思っていました。しかし、明らかに、最初のものが機能し、2 番目のものが機能しなかった場合はそうではありません。誰でもこれに光を当てることができますか?

4

3 に答える 3

4

最初の例でinputは、パラメータです。これは、呼び出し元が渡すことを選択した値で初期化されます。

2 番目の例でinputは、 は初期化されていない変数です。割り当てられる前に(あなたがしたように)それを読むことは、その時点でゴミが含まれているため、未定義の動作です。

于 2012-11-29T23:16:28.673 に答える
1
void Inventory:: showInventory(char input)

^ これにより、パラメーターの受け渡しが可能になります。

someInv.showInventory('s')これは、そのメソッドに何らかの値を呼び出して渡すことができ、渡した値がメソッドinputのローカル スコープで使用するために割り当てられることを意味します。


void Inventory:: showInventory()

^ これはそうではありません。メソッドのローカルスコープで宣言するだけですが、メソッドの外部からinput値を割り当てることはできません。input

さらに、これは実際にメソッドのシグネチャを変更します。したがって、 などの呼び出しsomeInv.showInventory('s')は失敗します。char

于 2012-11-29T23:15:49.190 に答える
0

char最初のケースでは、関数を呼び出すときにa を関数に渡します: inventory.showInventory('i')。これはまさにパラメーターの目的です。それらを使用すると、処理する関数にいくつかの値を渡すことができます-数学における関数のパラメーターとまったく同じです。

2 番目のケースでは、初期化されていない変数がinputあり、それを と比較しようとすると'i'、未定義の動作が発生します。

于 2012-11-29T23:16:47.443 に答える