必须返回值,函数重载

Must return value, Function Overloading

本文关键字:函数 重载 返回值      更新时间:2023-10-16

目前我正试图运行一个程序,你要么选择一个整数或小数,并基于你的数字被操纵。我的教授告诉我使用函数重载来实现这一点。但每次我试图编译它,它给我101个警告和2个错误说:'pick' must return a value。我申报得不对吗?我遵循了课本上的模板和网上找到的一些模板,但无法让它工作。

#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
int main()
{
  //Declarations
  int userInt;
  double userFloat;
  char selection, ans;
  static double counterInt, counterFloat;
  //Prototypes
  int pick(int);
  double pick(double);
  //Defaults
  counterInt = 0;
  counterFloat = 0;
  ans = 'Y';
  //Game
  do
  {
    cout << "Please choose an integer or a decimal number by typing in i or d" << endl;
    cin >> selection;
    if(selection == 'i')
    {
      cout << "Please enter an integer" << endl;
      cin >> userInt;
      cout << pick(userInt);
      counterInt++;}
    else
    {
      cout << "Please enter a decimal" << endl;
      cin >> userFloat;
      cout << pick(userFloat);
      counterFloat++;}
    //Play Again?
    cout << "Would you like to play again? Please enter Y or N" << endl;
    cin >> ans;
  }
  while ((ans == 'Y') || (ans == 'y'));
  //End Game
  if ((ans != 'Y') && (ans != 'y'))
  {
    cout << "Thank you for playing! You picked integers: " << counterInt << " times and you picked decimals: " << counterFloat << " times." << endl;
  }
  return 0;
}
//Function Overload
int pick(int number)
{
  if( number % 7 == 0)
  {
    cout << setw(7) << "7777777" << setw(7) << number << endl;
  }
  else
  {
    cout << setw(7) << "*******" << setw(7) << number << endl;
  }
}    
double pick(double number)
{
  cout << setw(6) << "The square root of the number " << number << " is: " << setprecision(3) << pow(number,.5) << endl;
}

两个pick函数分别声明为返回intdouble,但它们都没有返回语句。

//Function Overload
int pick(int number)
{
    if( number % 7 == 0)
    {
        cout << setw(7) << "7777777" << setw(7) << number << endl;
    }
    else
    {
        cout << setw(7) << "*******" << setw(7) << number << endl;
    }
    return number; // <<<<<<<<<<<<
}    

double pick(double number)
{
    double sqrt = pow(number,.5);
    cout << setw(6) << "The square root of the number " << number << " is: " << setprecision(3) << sqrt << endl;
    return sqrt; // <<<<<<<<<<<<
}

或者,如果它们实际上不需要返回任何东西,只需将返回类型更改为void:

void pick (int number) { ... }
void pick (double number) { ... }

您有一个名为pick的函数,并且您告诉编译器当函数完成其算法时您将返回一个整数。在你的函数中,你永远不会返回任何东西,你只是写了一个保存在var number中的特定值。您要么必须将函数变为空(这意味着没有返回值),要么返回任何值/即。"1"表示成功,"-1"表示失败。

//Function Overload
int pick(int number)
{
    if( number % 7 == 0)
    {
        cout << setw(7) << "7777777" << setw(7) << number << endl;
        return(1)
    }
    else
    {
        cout << setw(7) << "*******" << setw(7) << number << endl;
        return(-1)
    }
} 

如果不想返回任何值或变量,也可以使用void

//Function Overload
void pick(int number)
{
    if( number % 7 == 0)
    {
        cout << setw(7) << "7777777" << setw(7) << number << endl;
    }
    else
    {
        cout << setw(7) << "*******" << setw(7) << number << endl;
    }
} 

所以每次你在函数前写一个类型(可以是class, int, double, bool…)你必须返回符合规范的值type

使用int作为返回类型定义函数时,该函数必须返回int。否则,当调用该函数时,程序可能有未定义的行为。

你可以用两种方法解决你的问题:

  1. 更新函数返回值

    int pick(int number)
    {
        if( number % 7 == 0)
        {
            cout << setw(7) << "7777777" << setw(7) << number << endl;
        }
        else
        {
            cout << setw(7) << "*******" << setw(7) << number << endl;
        }
        return 0; // Or something that makes more sense in your program.
    }    
    
  2. 更新函数返回void

    void pick(int number)
    {
        if( number % 7 == 0)
        {
            cout << setw(7) << "7777777" << setw(7) << number << endl;
        }
        else
        {
            cout << setw(7) << "*******" << setw(7) << number << endl;
        }
    }    
    

您可以对其他重载函数进行类似的更改。