2015-07-06 132 views
-4

我的程序將溫度從華氏溫標轉換爲Celcius標度,最後轉換爲絕對值標尺。錯誤:無法將'float(*)(int)'轉換爲'float'

#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"; 

我爲什麼會收到這個錯誤?

回答

10

ab需要float並返回一個float

float ab(float a) 

cels不是float,它是一個函數:

float cels(int a) 

你可能是指

ab(cels(farh)) 

或者採取EMPORARY:

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

側面說明,ab或許應該被命名爲kelvin

+0

@BAarry 與ab(cels(farh))完美搭配。 –

1

其實你已經傳遞了一個funtion指針給ab。如果你的目的是傳遞給函數(!顯然不是),你可以使用下面的語法:

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

其偉大的菜單製作,例如,如果你有兩個選擇:1。 華氏到細胞 2.華氏到開爾文這將是有用的

您可以搜索回調函數在谷歌C