这是我的开关案例说明。编译器不断声明totalShare
尚未定义,即使是在情况1中也定义了。我是C ++的初学者,刚刚开始学习栈。
switch (option)
{
case 1:
{
string newStock;
double share;
double price;
cout << "Enter a new stock: " ;
cin >> newStock;
cout << "Enter a number of shares: " ;
cin >> share;
cout << "Enter price [for that number of shares]: " ;
cin >> price;
//share x price
double sharePrice = share * price;
//add to stack
newStockStack.push(sharePrice);
//total share
double totalShare;
totalShare += share;
break;
}
case 2:
{
//calculate stacks
double theTotal;
while (!newStockStack.empty())
{
theTotal += newStockStack.top();
newStockStack.pop();
return theTotal;
}
// FORMULA
//((every share x price)+ (every share x price)) / total number of shares
double LifoPrice;
LifoPrice = (theTotal / totalShare);
cout << "The Lifo price for the stock is: " << LifoPrice << endl;
break;
}
答案 0 :(得分:1)
double totalShare;
位于“案例1”区块
这意味着totalShare
对于该块而言是本地的,即,其范围仅在情况1内,并且在该块之外不可见。
但是您在{strong>“案例2”区块中有LifoPrice = (theTotal / totalShare);
。因此,您的编译器会抱怨未定义 totalShare
(在第2种情况下)。
解决方案:
在这样一个范围内定义该变量,以便可以在任何需要的地方使用它。在这种情况下,由于您需要在多个case块中使用该变量,因此请考虑在switch语句之外声明该变量。因为限制变量的范围是一种很好的做法,所以如果仅在switch语句内需要该变量,则可以在switch语句内但在需要totalShare
的所有case块之前声明它。
答案 1 :(得分:1)
变量totalShare
在块作用域中的标签case 1:
下声明。
case 1:
{
//...
//total share
double totalShare;
totalShare += share;
break;
}
因此,在标签case 2:
下的块范围中,它不可见
LifoPrice = (theTotal / totalShare);
您可以在任何大小写标签之前声明变量。
或者,如果编译器支持C ++ 17标准,则可以在switch语句中声明它。