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

标签 c++

<分区>

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

34|error: cannot convert 'float (*)()' to 'float' for argument '1' to '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);
}

最佳答案

calculator(ins_num, ins_num, ins_oper);

这会调用 calculator() 函数,将 ins_numins_oper 函数本身 作为参数(其中类型为 float (*)()char (*)(),指向返回 floatchar 的函数的指针,并且不带任何参数)。你不想要那个。您想要使用其他函数的返回值 调用calculator() 函数,因此您也应该调用那些函数:

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

这里是 some food for thought关于函数指针。

关于C++:无法将 'float (*)()' 转换为 'float',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14915728/

相关文章:

c++ - C/C++ 优化编译器因使用模板而损坏

c++ - 程序运行但没有显示 Qt c++

c++ - 如何在 C++ 中填充张量

c++ - 如何返回抽象类指针指向的对象?

c++ - 由于 "_fchmodat"在 mac 上使用 boost::filesystem 失败

c++ - 如何打印一系列矩形

c++ - 如何从 node-gyp 定位 'imqi.hpp'

c++ - 在带有 Rcpp 的 R 包中使用头文件 (.h) 和 cpp 文件

c++ - 快速容器以实现一致的性能

c++ - 包括<Windows.h>导致(未知属性“no_init_all”)错误