2013-03-10 55 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