错误的变量和返回的错误

Error with uninitialized variables and returns

本文关键字:错误 返回 变量      更新时间:2023-10-16

我的程序遇到了一些问题,但我不理解。在第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添加到计算器类中。最后,您将执行同类课程中的所有操作,但用户输入和控制台输出在您的班级之外。可以自动测试您的类,并且完全独立于用户界面。