2014-04-01 69 views
1

我想在C++中應用牛頓方法,現在只是測試如果我的指針工作和正確。現在的問題是它不能調用函數來測試這個,它說轉換有問題。函數指針作爲參數的C++問題

我的代碼:

#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)'| 

回答

0

如果你想申報newton採取函數指針,則需要在調用點通過他們到newton

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

編譯器的錯誤僅僅是說你在一個期望函數指針的插槽中傳遞了double,並且它不知道如何將double轉換爲函數指針double (*)(double)

+0

謝謝!這是我需要的修復!讓我的代碼工作,現在找到零哈哈 – ChonBonStudios

0

你並不需要通過函數指針。您在上面定義的功能可以直接使用。只是定義您的newton功能是這樣的:

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

是的,但最終我會使用它的素數來近似函數的0,所以我需要在函數中傳遞一個函數,同時越來越接近於零。我知道這個工程,但我需要使用指針:) – ChonBonStudios