我遇到了一个对我没用的问题但是通过使用参数解决了。 基本上,这有效:
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";
}
基本上我认为这是一样的。但显然不是第一个工作而第二个工作没有。 任何人都可以对此有所了解。
答案 0 :(得分:4)
在第一个示例中,input
是一个参数。它将由呼叫者初始化,无论他们选择传递什么值。
在第二个示例中,input
是未初始化的变量。在分配之前读取它(正如你所做的那样)是未定义的行为,因为它当时包含垃圾。
答案 1 :(得分:1)
void Inventory:: showInventory(char input)
^这允许参数传递。
这意味着您可以调用someInv.showInventory('s')
并将一些值传递给该方法,并且您传入的值将被分配给input
,以便在方法的本地范围内使用。
void Inventory:: showInventory()
^这不;它只是在方法的局部范围内声明input
,但是您无法从方法外部向input
分配一些值。
此外,这实际上改变了方法的signature。因此,someInv.showInventory('s')
之类的调用将失败,除非您的方法具有与char
相同的名称
答案 2 :(得分:0)
在第一种情况下,当您调用它时,您会将char
传递给该函数:inventory.showInventory('i')
。这正是参数的用途。它们允许您将一些值传递给要处理的函数 - 与数学函数的参数完全相同。
在第二种情况下,您有一个未初始化的变量input
,并且您尝试将其与'i'
进行比较,从而导致未定义的行为。