目前我正在尝试运行一个程序,您可以选择一个整数或一个小数,并根据您的数字进行操作。我的教授告诉我使用函数重载来实现这一点。但是每当我尝试编译它时,它会给我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;
}
答案 0 :(得分:1)
您的pick
个函数分别被声明为返回int
或double
,但它们都没有返回语句。
//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) { ... }
答案 1 :(得分:1)
你有一个名为pick的函数,你告诉编译器你在函数完成它的算法时返回一个整数。在您的函数中,您永远不会返回任何内容,只需编写保存在var编号中的特定值。您要么必须将函数转为空(这意味着没有返回值),要么返回任何值/即&#39; 1&#39;为了成功,&#39; -1&#39;失败。
//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 ..)时,您必须返回适合规范的值。型
答案 2 :(得分:0)
当函数定义为int
作为返回类型时,函数必须返回int
。否则,在调用该函数时,程序可能具有未定义的行为。
您可以通过两种方式解决问题:
更新函数以返回值。
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.
}
更新函数以返回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;
}
}
您可以对其他重载功能进行类似的更改。