我的程序将温度从华氏温度转换为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";
为什么我收到此错误?
答案 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搜索中的回调函数。