我的程序有些问题,我不明白。 在第72行,我得到错误:“错误C4700:未初始化的局部变量'sumInEuros'使用”但是它肯定是初始化的,因为我用它来存储计算? 同样在第66行,我得到“错误C4716:'showPriceInEuros':必须返回一个值” - 为什么必须返回一个值?该函数只是用于向控制台输出消息。
我正在使用VS13而且它是c ++。 任何帮助将非常感谢,因为我被卡住了! 谢谢!
#include <iostream> //for cin >> and cout <<
#include <cassert> //for assert
#include <iomanip> //for endl
#include <Windows.h>
using namespace std;
void processAPrice();
int getPriceInPounds();
int convertPriceIntoEuros(int pounds);
int showPriceInEuros(int pounds, int euros);
int calculateSum(int euros);
void produceFinalData(int sum, int numberOfPrices);
int main()
{
char answer('Y');
int numberOfPrices(0);
while (answer = 'Y')
{
processAPrice();
numberOfPrices++;
cout << "Continue? (Y/N)";
cin >> answer;
}
if (numberOfPrices > 0)
//produceFinalData(sum, numberOfPrices);
system("PAUSE"); //hold the screen until a key is pressed
return(0);
}
void processAPrice() //
{
int pounds = getPriceInPounds();
int euros = convertPriceIntoEuros(pounds);
int sum = showPriceInEuros(pounds, euros);
calculateSum(euros);
}
int getPriceInPounds() //
{
int priceInPounds;
cout << "Enter a price (in Pounds): /234";
cin >> priceInPounds;
return priceInPounds;
}
int convertPriceIntoEuros(int priceInPounds) //
{
const int conversionRate(0.82);
return priceInPounds / conversionRate;
}
int showPriceInEuros(int pounds, int euros) //
{
SetConsoleOutputCP(1252);
cout << "The Euro value of /234" << pounds << "is: \u20AC" << euros;
}
int calculateSum(int euros) //
{
int sumInEuros;
sumInEuros = (sumInEuros + euros);
return sumInEuros;
}
void produceFinalData(int sum, int numberOfPrices) //
{
SetConsoleOutputCP(1252);
cout << "The total sum is: \u20AC" << sum;
cout << "The average is: \u20AC" << (sum/numberOfPrices);
}
答案 0 :(得分:4)
好吧,showPriceInEuros
函数没有返回它承诺在签名中返回的int
。那是错误。
如果该函数不应返回值,则应将其返回类型声明为void
:
void showPriceInEuros(int pounds, int euros);
//^^
然后:
void showPriceInEuros(int pounds, int euros) {
SetConsoleOutputCP(1252);
cout << "The Euro value of /234" << pounds << "is: \u20AC" << euros;
}
当然。
答案 1 :(得分:3)
您没有在此函数中初始化sumInEuros。您将结果存储在其中 - 这是正确的,但要计算您使用未初始化值的结果。
int calculateSum(int euros) //
{
int sumInEuros;
sumInEuros = (sumInEuros + euros);
return sumInEuros;
}
回答下面的问题:
我可能会创建一个类PriceCalculator,它具有算法的所有功能和内部状态:
class PriceCalculator {
int m_sumInEuros;
public:
PriceCalculator()
: m_sumInEuros(0) { }
void processAPrice(int price);
int getSumInEuros() const { return m_sumInEuros; }
private:
void updateSum(int priceInEuros);
};
从主要功能中,你应该创建一个这种类型的对象,并给它你想要总和的价格。不要从班上做任何控制台输入。
int main()
{
PriceCalculator calc;
char answer('Y');
int numberOfPrices(0);
while (answer = 'Y')
{
int priceInPounds;
cout << "Enter a price (in Pounds): /234";
cin >> priceInPounds;
calc.processAPrice(priceInPounds);
numberOfPrices++;
cout << "Continue? (Y/N)";
cin >> answer;
}
...
您可能还想考虑将numberOfPrices添加到计算器类中。最后,您将完成您班级中的所有操作,但是您的班级之外的用户输入和控制台输出。您的课程可以通过这种方式自动测试,并且完全独立于用户界面。
答案 2 :(得分:3)
当我用它来存储计算时,肯定会被初始化吗?
计算基于变量的未初始化值:
sumInEuros = (sumInEuros + euros);
^^^^^^^^^^ not initialised
也许你可以声明它static
,以便在调用函数之间保留它的值,以便计算传递给函数的所有值的总和。通常,最好使用类来管理这样的持久数据,使用成员函数来更新和访问它。
为什么必须返回一个值?
因为你这样说:
int showPriceInEuros(int pounds, int euros)
^^^
如果不应返回值,请将返回类型更改为void
。