0

私はプログラミングに不慣れで、今日から関数を使い始めました。コードをコンパイルしようとすると、次のエラーメッセージが表示されます。

34 |エラー:引数「1」の「float(*)()」を「float」に変換できません。「floatcalculator(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_numins_oper float (*)()char (*)()floatcharcalculator()

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

ただし、注意する必要があります。私の意見では、あなたはこの1行のコードでやりすぎです。私はそれをいくつかの行に分割することをお勧めします:

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 に答える