我是编程新手,今天我开始使用函数。 当我尝试编译代码时,我收到此错误消息:
34 | error:无法将参数'1'的'float(*)()'转换为'float' '浮动计算器(浮动,浮动,字符)'|
问题出在哪里?
#include <iostream>
using namespace std;
//Insert number
float ins_num(){
float num;
cout<<"Insert a number: ";
cin>>num;
return num;
}
//Insert operator
char ins_oper(){
char oper;
do{
cout<<"Insert the operator: ";
cin>>oper;
}
while(oper!='+'&&oper!='-'&&oper!='*'&&oper!='/');
return oper;
}
//Calculator
float calculator(float n1,float n2,char oper){
switch(oper){
case '+':return n1+n2;
case '-':return n1-n2;
case '*':return n1*n2;
case '/':return n1/n2;
}
}
int main(){
calculator(ins_num,ins_num,ins_oper);
}
答案 0 :(得分:3)
calculator(ins_num, ins_num, ins_oper);
这会调用calculator()
函数,其中ins_num
和ins_oper
函数本身作为参数(其类型为float (*)()
和{{ 1}},指向分别返回char (*)()
或float
并且不带参数的函数的指针。你不希望这样。您想使用其他功能的返回值调用char
函数,因此您也应该调用:
calculator()
这里是关于函数指针的some food for thought。
答案 1 :(得分:1)
要在函数中执行代码,您需要使用程序员所称的函数调用。在C ++中,我们用括号做这个。所以,至少,你需要改变
calculator(ins_num,ins_num,ins_oper);
到
calculator(ins_num(),ins_num(),ins_oper());
但是你需要小心。在我看来,你在这一行代码中做得太多了。我建议你把它分成几行:
float lhs = ins_num(); // "lhs" is a common mathematical abbreviation for "left hand side"
float rhs = ins_num(); // "rhs" is a common mathematical abbreviation for "right hand side"
char oper = ins_oper();
calculator(lhs, rhs, oper);
这样做的主要原因是它可以帮助您在程序变得更复杂时跟踪错误。