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

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-28 19:14:31  来源:igfitidea点击:

C++ linked error ld returned 1 exit status

c++syntaxcompiler-errorslinked-list

提问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 doublereference and an intreference, rather than 8 doubles, a doublereference and an intreference).

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&)。请看一看