C++ lié erreur ld a retourné 1 code de sortie
Je suis en train de compiler, mais je reçois cette erreur, personne ne vois où est mon erreur?
C:\Users\BRIAN'~1\AppData\Local\Temp\cc2Feaaa.o(.texte+0x368) Dans la fonction "main":
[Linker error] undefined reference to `sécante(double, double, double, double, double, double, double, double, double&, int&, double)
C:\Users\BRIAN'~1\AppData\Local\Temp\cc2Feaaa.o(.texte+0x368) ld a retourné 1 code de sortie
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)
{
}
- Fournir le message d'erreur COMPLET.
- Et c'est pourquoi nous n'avons pas ridiculement long et difficile à lire en fonction des listes de paramètres.
Vous devez vous connecter pour publier un commentaire.
La déclaration de la fonction
secant
diffère de la signature de la mise en œuvre effective:
L'éditeur de liens est d'essayer de trouver de la mise en œuvre de la proclamation de la liste des paramètres, mais il ne le trouve pas.
La mise en œuvre de
secant()
vous avez fourni contient les paramètres incorrects (9double
's, undouble
référence et uneint
de référence, plutôt que 8double
s, undouble
référence et uneint
de référence).Vous déclarez sécante comme:
mais vous définir comme:
sécante définition et déclaration semble être différent...
Dans la déclaration que vous avez le dernier argument de passer par copie (double), dans sa définition par référence (int&). Veuillez consulter