C ++:无法将'float(*)()'转换为'float'

时间:2013-02-16 22:17:36

标签: c++

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

  

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

2 个答案:

答案 0 :(得分:3)

calculator(ins_num, ins_num, ins_oper);

这会调用calculator()函数,其中ins_numins_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);

这样做的主要原因是它可以帮助您在程序变得更复杂时跟踪错误。