2011-05-11 390 views
0

我想編譯但我不斷收到此錯誤,有沒有人看到我的錯誤在哪裏?C++鏈接錯誤ld返回1退出狀態

C:\用戶\ BRIAN '〜1個\應用程序數據\本地\ TEMP \ cc2Feaaa.o(的.text + 0x368)在函數'主':

[連接子錯誤]未定義參考`正割(雙,雙,雙,雙,雙,雙,雙,雙,雙&,整數&,雙)

C:\用戶\ BRIAN'〜1 \應用程序數據\本地\ 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) 
{ 
    } 
+0

提供完整的錯誤信息。 – 2011-05-11 08:11:49

+0

這就是爲什麼我們沒有可觀的長和難以閱讀的函數參數列表。 – 2016-05-13 13:58:27

回答

5

函數的聲明secant

void secant(double, double, double, double, double, double, double, double, double&, int&, double); 

不同於實際執行的簽名:

void secant(double radians, double velocity, double kr, double uc, double q, double b, double x0, double x1, double angle, double& root, int& iteration) 
{ 
    ... 
} 

鏈接器試圖尋找與聲明的參數列表執行,但沒有找到它。

2

您所提供的secant()實施包含錯誤的參數(9 double的,一個參考doubleint參考,而不是8個double S,A double引用和參考int)。

1

您聲明割線爲:

void secant(double, double, double, double, double, double, double, double, double&, int&, double); 

,但你把它定義爲:

void secant(double , double , double , double , double , double , double , double , double , double& , int&) 
1

割線的定義和聲明似乎是不同的...... 在聲明中,您有最後一個參數傳遞由-copy(double),定義其參照(int &)。請看看

相關問題