错误:无法将'float(*)(int)'转换为'float'

时间:2015-07-06 11:38:10

标签: c++

我的程序将温度从华氏温度转换为Celcius刻度,最后转换为绝对值刻度。

#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;

int farh;

float cels(int a)
{
    float c;
    const int m0 = 32;
    const float m1 = 0.5555;

    c=(a-m0)/m1;
    return c;
}

float ab(float a)
{
    const float m2 = 273.15;
    float d;

    d=a-m2;
    return d;
}

int main() {
    const int WIDTH = 16;

    cout << setiosflags ( ios :: left );
    cout << setw(WIDTH) << "Fahrenheit" << setw(WIDTH) << "Celcius" << setw(WIDTH) << "Absolute Value" << '\n';

    cout.setf(ios::fixed);
    cout.precision(2);

    for (farh = 0 ; farh <= 300 ; farh = farh + 20) {
        cout.width(16);
        cout << farh << cels(farh) << ab(cels) << "\n";
    }

    return 0;
}

我收到的编译时错误消息是:

d26.cc: In function ‘int main()’:
d26.cc:38:40: error: cannot convert ‘float (*)(int)’ to ‘float’ for argument ‘1’ to ‘float ab(float)’
   cout << farh << cels(farh) << ab(cels) << "\n";

为什么我收到此错误?

2 个答案:

答案 0 :(得分:10)

ab需要float并返回float

float ab(float a)

cels不是float,而是一个函数:

float cels(int a)

你可能意味着

ab(cels(farh))

或者暂时:

float cur_cels = cels(farh);
cout << farh << cur_cels << ab(cur_cels) << "\n";

旁注,ab应该命名为kelvin

答案 1 :(得分:1)

实际上你已经将一个功能指针传给了ab。如果您的意图是传递函数(显然不是!),您可以使用以下语法:

float ab(float(*callback)(int),int pass) {
  callback(pass); /* It calls the function indirectly with <pass> */
}

如果您有两个选项,它非常适合菜单创建: 1.华氏度到细胞 华氏度到开尔文它会很有用

您可以使用google搜索中的回调函数