C++ 链接错误 ld 返回 1 个退出状态
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/5961150/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
C++ linked error ld returned 1 exit status
提问by Brian
I am trying to compile but i keep getting this error, does anyone see where my mistake is?
我正在尝试编译,但我不断收到此错误,有没有人看到我的错误在哪里?
C:\Users\BRIAN'~1\AppData\Local\Temp\cc2Feaaa.o(.text+0x368) In function `main':
C:\Users\BRIAN'~1\AppData\Local\Temp\cc2Feaaa.o(.text+0x368) 在函数 `main' 中:
[Linker error] undefined reference to `secant(double, double, double, double, double, double, double, double, double&, int&, double)
[链接器错误] 对`secant(double, double, double, double, double, double, double, double, double&, int&, double) 的未定义引用
C:\Users\BRIAN'~1\AppData\Local\Temp\cc2Feaaa.o(.text+0x368) ld returned 1 exit status
C:\Users\BRIAN'~1\AppData\Local\Temp\cc2Feaaa.o(.text+0x368) ld 返回 1 个退出状态
using namespace std;
#include<iostream>
#include<cmath>
#include<iomanip>
#include<fstream>
// Declaration of functions used
void writetable (double, double, double, double);
void secant(double, double, double, double, double, double, double, double, double&, int&, double);
void writedata (double, double, double);
double fx( double, double, double, double, double, double, double);
const double tol=0.0001; // Tolerance for convergence
const int max_iter=50; // Maximum iterations allowed
// main program
int main()
{
int iteration; // Number of iterations
double kr, uc, q, b, radians;
double x0, x1; // Starting values for x
double root; // Root found by secant method
const double PI = 4.0*atan(1.0);
ifstream datain ("shuttle.txt");
ofstream dataout ("results.txt");
datain >> kr >> uc >> q >> b;
x0= 1000;
x1 = 200;
for (double velocity = 16000; velocity <= 17500; velocity += 500)
{
for (double angle = 10; angle <= 70; angle += 15)
{
radians= angle * PI/180 ;
cout << velocity << endl;
cout << radians << endl;
cout << angle << endl;
secant (radians, velocity, kr, uc, q, b, x0, x1, root, iteration, angle);
}
}
writetable(kr, uc, q, b);
system("pause");
}
// Definition of function "secant"
// Receives a, b, c, d and x0 values from main program
// Returns root and the iterations required
void secant(double radians, double velocity, double kr, double uc, double q, double b, double x0, double x1, double angle, double& root, int& iteration)
{
double xnminus1, xnplus1, xn; // Local variables
iteration=0; // Initialize iterations
xnminus1=x0;
xn=x1;
do
{
++iteration;
xnplus1 = xn - fx(radians, velocity, kr, uc, q, b, xn)*(xn-xnminus1)/
(fx(radians, velocity, kr, uc, q, b, xn)-fx(radians, velocity, kr, uc, q, b, xnminus1));
cout<<"x"<<iteration+1<<" = "<<xnplus1<<endl;
xnminus1 = xn;
xn=xnplus1;
}
while ((fabs(fx(radians, velocity, kr, uc, q, b, xnplus1)) >= tol )&& (iteration < max_iter));
root=xnplus1;
cout<<"\nThe root is = "<<root<<endl;
cout<<"The number of iterations was = "<<iteration<<endl;
cout<<"The value of f(x) at the root = "<<fx(radians, velocity, kr, uc, q, b, root)<<endl<<endl;
if(root <1000) cout << "safe"<<endl<<endl; else cout <<"unsafe"<<endl<<endl;
writedata(angle, velocity, root);
}
// Defines "fx"
double fx(double radians,double velocity, double kr, double uc, double q, double b, double ts)
{
return kr * pow(ts,4.0) + uc * ts - q - pow((velocity / b), 2.0) * sin(radians);
}
void writetable(double kr, double uc, double q, double b)
{
cout <<endl << "Input Parameters:" <<endl;
cout<< "Kr(1/K^2)=" << kr << endl << "uc(1/K)=" << uc <<endl << "q(unitless)=" << q << endl << "b(mph)=" << b<< endl; //not done this part yet
cout << " angle..............velocity...........surface temp..............safe..........";
cout << " degs...............mph................Kelvin.....................?............";
cout << "--------------------------------------------------------------------------------";
}
void writedata (double angle, double velocity, double root)
{
}
回答by Timbo
The declaration of the function secant
函数的声明 secant
void secant(double, double, double, double, double, double, double, double, double&, int&, double);
differs from the signature of the actual implementation:
与实际实现的签名不同:
void secant(double radians, double velocity, double kr, double uc, double q, double b, double x0, double x1, double angle, double& root, int& iteration)
{
...
}
The linker is trying to find the implementation with the declared parameter list, but it doesn't find it.
链接器正在尝试使用声明的参数列表查找实现,但没有找到。
回答by trojanfoe
The implementation of secant()
you have provided contains the wrong parameters (9 double
's, a double
reference and an int
reference, rather than 8 double
s, a double
reference and an int
reference).
secant()
您提供的实现包含错误的参数(9 个double
,一个double
参考和一个int
参考,而不是 8 个double
,一个double
参考和一个int
参考)。
回答by trojanfoe
You declare secant as:
您将割线声明为:
void secant(double, double, double, double, double, double, double, double, double&, int&, double);
but you define it as:
但您将其定义为:
void secant(double , double , double , double , double , double , double , double , double , double& , int& )
回答by Mayank
secant definition and declaration seems to be different... In declaration you have last argument pass-by-copy (double), in definition its by reference (int&). Please have a look
割线定义和声明似乎不同......在声明中,您有最后一个参数传递复制(双),在定义中通过引用(int&)。请看一看