错误的变量和返回的错误
Error with uninitialized variables and returns
我的程序遇到了一些问题,但我不理解。在第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);
}
好吧, 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;
}
当然。
当我使用它来存储计算时,它肯定是初始化的?
计算基于变量的非传统值:
sumInEuros = (sumInEuros + euros);
^^^^^^^^^^ not initialised
也许您可以将其声明static
,以便在函数的调用之间保留其值,以计算您传递给函数的所有值的总和。通常,最好使用类来管理这样的持久数据,并且会员函数可以更新和访问它。
为什么必须返回值?
因为您说的是:
int showPriceInEuros(int pounds, int euros)
^^^
如果不应该返回值,请将返回类型更改为 void
。
您不在此功能中初始化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;
}
...
您可能还想考虑将numberOfrices添加到计算器类中。最后,您将执行同类课程中的所有操作,但用户输入和控制台输出在您的班级之外。可以自动测试您的类,并且完全独立于用户界面。
相关文章:
- (C++)分析树以计算返回错误值的简单算术表达式
- 为什么与常规GCC不同,即使有"学究性错误",MinGW-GCC也能容忍丢失的返回类型
- 在没有定义返回类型的函数中返回布尔值,并将结果保存在无错误的char编译中-为什么
- 我不断收到 [错误] ID 返回 1 退出状态错误,但看不到问题所在
- C++中函数的向量返回类型引发错误
- 有人知道为什么在开关中使用stoi函数会返回恒定的错误吗
- glad 导致 glfwSwapBuffers 返回错误消息
- 将错误返回给调用方而不是立即在 C++ 中抛出错误是否是一种好的做法
- QNX Momentics: GoogleMock - 返回有价值,在函数中返回 void 错误
- 我的模板类方法返回错误类型?
- C++ 中的编译错误:未定义对"主"的引用 collect2:错误:ld 返回 1 个退出状态
- 替换WCHAR_T错误返回存储地址
- 错误:void 值未被忽略,因为它应该被忽略,错误:返回语句具有值
- 带有值的递归阶乘错误返回语句,在函数中返回 'void' [-fallowive]
- 存储在静态常量整数 (C++) 中的对数函数的错误返回值
- 更丰富的错误返回消息用于提升::精神::qi 解析
- C++初级逻辑错误-返回0
- 由于进程很多,pthread_create的错误返回代码是 35 错误,我用过pthread_exit应该杀死线程不是吗?
- c++错误处理返回值错误返回
- systememerror:没有异常集的错误返回