0

我是编程新手,今天我开始使用函数。当我尝试编译代码时,我收到此错误消息:

34|错误:无法将参数 '1' 的 'float (*)()' 转换为 'float' 到 'float calculator(float, float, char)'|

问题出在哪里?

#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);
}
4

2 回答 2

3
calculator(ins_num, ins_num, ins_oper);

这将调用calculator()函数,并以ins_numandins_oper 函数本身作为参数(其类型是float (*)()and char (*)(),一个指向函数的指针,分别返回floator char,并且不带参数)。你不想要那个。您想使用其他函数calculator()返回值调用该函数,因此您也应该调用它们:

calculator(ins_num(), ins_num(), ins_oper());

这里有一些关于函数指针的思考。

于 2013-02-16T22:20:59.987 回答
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);

这样做的主要原因是,当您的程序变得更加复杂时,它将帮助您跟踪错误。

于 2013-02-16T22:25:46.757 回答