开发者

C++ linked error ld returned 1 exit status

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':

[Linker error] undefined reference to `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

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开发者_Python百科) 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)
 {
  }


The declaration of the function 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.


The implementation of secant() you have provided contains the wrong parameters (9 double's, a double reference and an int reference, rather than 8 doubles, a double reference and an int reference).


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& )


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

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜