C ++问题,函数指针作为参数

时间:2014-04-01 01:40:23

标签: c++ function pointers

我正在尝试在C ++中应用newtons方法,现在只测试我的指针是否有效并且是正确的。现在问题是它无法调用函数来测试它,它说转换存在问题。

我的代码:

#include <iostream>
#include <cstdlib>
#include <cmath>

using namespace std;

double newton(double (*f) (double), double (*fPrime)(double), double intialValue, int    iterations);
double f(double x);
double fPrime(double x);

int main() {


int limitIterations = 0;
double intialValue = 0;


cout << "Please enter a starting value for F(X): " ;
cin >> intialValue;

cout << endl << "Please enter the limit of iterations performed: " ;
 cin >> limitIterations;



cout << newton(intialValue, limitIterations);


return 0;
}

 double f(double x) {
 double y;
 y =(x*x*x)+(x*x)+(x);
 return (y);
 }

double fPrime(double x){
double y;
y = 3*(x*x) + 2 * x + 1;
return (y);

}

double newton(double (*f) (double), double (*fPrime)(double), double intialValue, int     iterations){

    double approxValue = 0;

    approxValue = f(intialValue);

    return (approxValue);

 }

错误:

|26|error: cannot convert 'double' to 'double (*)(double)' for argument '1' to 'double  newton(double (*)(double), double (*)(double), double, int)'|

2 个答案:

答案 0 :(得分:0)

您不需要传递函数指针。您可以直接使用上面定义的功能。只需像这样定义newton函数:

double newton(double intialValue, int iterations) {
    double approxValue = 0;
    approxValue = f(intialValue);
    return (approxValue);
}

答案 1 :(得分:0)

如果您确实要声明newton获取函数指针,那么您需要将它们在调用站点传递给newton

cout << newton(f, fPrime, initialValue, iterations);

编译器的错误只是说你在一个插槽中传递double,它期望一个函数指针,并且它不知道如何将double转换为函数指针{ {1}}。