2013-03-10 67 views
0

傳遞函數乘以一些我上面我的主要方法和我的所有其他職能下面的代碼:如何通過引用

typedef double (*FUNC)(double); 

double integrate(FUNC f, double a, double b){ 
double sum = 0; 
for(int i=a; i<=b; i++){ 
    sum = sum + (f * .0001); //error occurs here, red squiggly line under "f" 
} 
    return sum; 
} 

在Microsoft Visual Studio C++編譯,我得到一個錯誤:表達式必須有算術或枚舉類型。我在評論中指出錯誤來自哪裏。有人可以向我解釋爲什麼我有這個錯誤,以及我如何解決這個錯誤?

+0

afaik你不能通過引用傳遞函數,只有函數指針,這就是你正在使用的。 (參考部分可以被認爲是調用一個函數) – ted 2013-03-10 20:20:33

回答

2

嘗試使用這個代替

sum = sum + f(.0001); 

乘以一個分數的函數指針就不會那麼好走。

+0

因此,我不能乘以一個0到1之間的數字來返回x^2的函數嗎? – Chase 2013-03-10 19:49:32

+0

當然可以,但不能將函數指針本身與數字相乘。請記住,* f *只是一個指向函數的指針,它會對傳遞的double進行一些操作。你必須調用函數來獲得有用的東西。所以如果你有一個變量x可用,你可以改爲'sum = sum + f(x)* 0.0001'。 – fredrik 2013-03-10 19:53:49

3

我認爲您試圖將f(x)整合爲x的值從ab

在這種情況下,你的代碼是非常不正確的。

你的0.0001似乎表明,你實際上是試圖用10000個步驟,在這種情況下,你會用線沿線的東西:

const int steps = 10000; 
double x = a; 
double delta = (b - a)/steps; 
for(int i = 0; i < steps; i++, x += delta) 

你可以這樣計算使用呼叫f(x)調用的函數指針,並總結出來。

+0

你發現了另一個可能的錯誤,但並沒有喚起關於函數指針的問題的核心。加上它,使它成爲一個偉大的遊戲者 – ted 2013-03-10 20:16:17

+0

我以爲我有過,但已編輯過,以使它更清晰。 – 2013-03-10 20:19:06