2017-10-12 695 views
0

我寫一個簡單的程序來計算函數的導數,但我送花兒給人得到的錯誤:C++錯誤collect2:錯誤:LD返回1退出狀態

collect2: error: ld returned 1 exit status

這裏是我的程序:

#include <iostream> 
#include <stdlib.h> 
#include <math.h> 

using namespace std; 

double derivative2(double (fun), double step, double x); 
double fun(double); 

int main(int argc, char* argv[]){ 
    double h = atof(argv[1]); 
    double x = sqrt(2); 
    cout << derivative2(fun(x),h,x) << endl; 
    return 0; 
} 


double derivative2(double fun(double),double step, double x){ 
    return ((fun(x+step)-fun(x))/step);} 


double fun(double x){ 
    return atan(x); 
} 

我找到了this的帖子,但它在我的情況下沒有用。

+0

即誤差趨於跟隨至少一個(可能更多)的其他誤差從接頭。這些錯誤通常與問題的原因有關。在這種情況下,問題在於'using namespace std'後面立即聲明'derivative2()'與定義不匹配,所以你正在重載函數。 'main()'中'derivative2()'的調用調用未定義的那個。由於沒有定義函數的調用,鏈接器通常會報告類似「未定義的引用」的內容。 collect2錯誤源於此。 – Peter

+0

@Peter這是正確的定義?當他們相等時,我得到一堆錯誤,說* fun不能用作函數*。 – mattiav27

+0

「正確的定義」取決於你想要達到的目標。就你的代碼而言,'derivative2()'[在main()']之後出現的定義就是你的意圖。該函數接受一個(指向)函數作爲第一個參數。然而,'using namespace std'後面的'derivative2()'聲明接受一個'double'作爲第一個參數。在'main()'中使用'derivative2()'也會將'double'(調用'fun(x)')的結果傳遞給'derivative2()' - 與前面的derivative1()但不包括隨後的定義。 – Peter

回答

1
double derivative2(double (fun), double step, double x); 

而且

double derivative2(double fun(double),double step, double x) 

是不同的東西。在第一個聲明fundouble,第二個fundouble(*)(double)(指向函數的指針)。

由於此函數計算某點的導數,因此正確的聲明是帶有函數指針的聲明。

修正:

double derivative2(double fun(double), double step, double x); // fun is a function pointer. 
... 
cout << derivative2(fun, h, x) << endl; // Pass fun as a function pointer. 
相關問題