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的帖子,但它在我的情況下沒有用。
即誤差趨於跟隨至少一個(可能更多)的其他誤差從接頭。這些錯誤通常與問題的原因有關。在這種情況下,問題在於'using namespace std'後面立即聲明'derivative2()'與定義不匹配,所以你正在重載函數。 'main()'中'derivative2()'的調用調用未定義的那個。由於沒有定義函數的調用,鏈接器通常會報告類似「未定義的引用」的內容。 collect2錯誤源於此。 – Peter
@Peter這是正確的定義?當他們相等時,我得到一堆錯誤,說* fun不能用作函數*。 – mattiav27
「正確的定義」取決於你想要達到的目標。就你的代碼而言,'derivative2()'[在main()']之後出現的定義就是你的意圖。該函數接受一個(指向)函數作爲第一個參數。然而,'using namespace std'後面的'derivative2()'聲明接受一個'double'作爲第一個參數。在'main()'中使用'derivative2()'也會將'double'(調用'fun(x)')的結果傳遞給'derivative2()' - 與前面的derivative1()但不包括隨後的定義。 – Peter