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