必须返回值,函数重载
Must return value, Function Overloading
目前我正试图运行一个程序,你要么选择一个整数或小数,并基于你的数字被操纵。我的教授告诉我使用函数重载来实现这一点。但每次我试图编译它,它给我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
函数分别声明为返回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) { ... }
您有一个名为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
。否则,当调用该函数时,程序可能有未定义的行为。
你可以用两种方法解决你的问题:
-
更新函数返回值
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; } }
您可以对其他重载函数进行类似的更改。
相关文章:
- 为什么使用SFINAE而不是函数重载
- 为什么我不能在 C++ 中的特定函数重载中调用同一函数的任何其他重载?
- c++:可变模板和函数重载
- 在缺少函数重载时抛出异常,并带有 std::variant 而不是编译时错误
- 解决模板成员函数重载
- 为什么不允许成员函数和非成员函数之间的函数重载?
- 推断模板化函数中的函数重载
- C++复制函数重载导致"must be a nonstatic member function"错误
- 为什么 std::sort 找不到合适的(静态成员)函数重载?
- 可变参数泛型 lambda 和函数重载
- C++中的函数重载和继承
- 当有右值构造函数可用时,为什么从右值调用类引用构造函数重载?
- C/C++ 可变参数宏函数重载
- 将基类的成员函数重载到其他派生类C++
- C++ 函数重载匹配
- C++函数重载,具体步骤是什么
- C++:使用 param pack 显式调用函数重载
- 隐式生成的函数重载用于右值参数?
- 使用函数重载输入运算符
- 运算符重载函数上的函数重载