[英]Why am I getting the error “using uninitialized memory 'i'” and “uninitialized local variable 'i' used” when trying to make i = i*i
[英]Why am I getting an uninitialized local variable error when I have already defined it?
我是 c++ 的初學者,我遇到了這個錯誤的問題,我知道這個錯誤意味着我正在嘗試使用一個尚未被賦予值的變量。
程序的上下文是一個變量叫做option,option的值是用戶在后面的function中輸入的。 當我開始收到此錯誤時,我唯一的想法是給變量一個在 function 中確定的值,因此寫為“option = enteroption(option);” 但是它仍然說該變量未初始化。 任何人都可以幫助解釋我可能做錯了什么嗎? 謝謝。
#include "pch.h"
#include <iostream>
#include "Arcade game menu.h"
using namespace std;
int main()
{
char option; //declare variable
float balance; //declare variable
const unsigned char pounds(156); //signatures for functions
void processoption(char, float&, char);
void payinitialfee(float&);
char enteroption(char);
payinitialfee(balance); //call functions
enteroption(option);
while ((option != 'Q') && (balance > 0)); //while option is not Q and balance is greater than 0 call functions
{
processoption(option, balance, pounds);
option = enteroption(option);
}
cout << "Thanks for playing." << endl;
system("pause");
}
void payinitialfee(float& balance)
{
balance = 100;
}
char enteroption(char option)
{
cout << "Enter option..." << endl << "P:Play or B:Balance or Q:Quit" << endl;
cin >> option;
void putinUpperCase(char);
putinUpperCase(option);
return option;
}
void putinUpperCase(char option)
{
option = toupper(option);
}
void processoption(char option, float&balance, char pounds)
{
void playGame(float&); //signatures
void showbalance(float&, char);
switch (option)
{
case 'P': playGame(balance);
break;
case 'B': showbalance(balance, pounds);
break;
default: cout << "ERROR: INVALID COMMAND." << endl;
break;
}
}
void playGame(float& balance)
{
cout << "Playing..." << endl;
balance = balance - 20;
}
void showbalance(float&balance, char pounds)
{
cout << "The current balance is... " << pounds << balance << endl;
}
您將未初始化的變量option
作為參數傳遞給 function enteroption
option = enteroption(option);
這沒有任何意義,編譯器會將其指向您的。
function 可以這樣聲明
char enteroption();
在 function 中,您可以聲明一個將獲取值的局部變量option
。 然后這個變量可以從 function 中返回,並賦值給 main 中聲明的變量option
。
似乎 function 的調用
putinUpperCase(option);
沒有效果,因為變量option
未通過引用。 參見 function 聲明
void putinUpperCase(char);
似乎 function 應該聲明為
void putinUpperCase( char & );
編譯器對此是正確的。
在您當前的代碼中,您調用option = enteroption(option)
。 此時option
未定義,編譯器會告訴您。 您要么想通過引用傳遞option
:
void enteroption(char &option)
{
// ...
cin >> option;
// ...
}
或者不要在這里使用參數:
char enteroption()
{
char option;
// ...
cin >> option;
// ...
return option;
}
您可以通過調用 function 而不是返回字符來傳遞本地成員option
的引用。 相同的方法可以用於制作最終稱為 function 的大寫字母,可以使用傳入的引用來修改參數的值。
enteroption(option);
void enteroption(char& option)
{
cout << "Enter option..." << endl << "P:Play or B:Balance or Q:Quit" << endl;
cin >> option;
void putinUpperCase(char&);
putinUpperCase(option);
return;
}
void putinUpperCase(char& option)
{
option = toupper(option);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.