2017-03-16 60 views
2

main.ccC++錯誤「未定義的GPScoord引用::(雙,雙)等」

#include <iostream> 
#include <cstdlib> 
#include <string> 
#include "gps.h" 

using namespace std; 

int main(int argc, char *argv[]) 
{ 

    GPScoord gps1(12.0,13.0); 
    GPScoord gps2(12.0,13.0); 

    cout<<gps1.distance_to(gps2)<<endl; 

    return 0; 
} 

gps.h

#ifndef GPS_H 
#define GPS_H 

class GPScoord { 
    public: 
    GPScoord(double lat, double longt); 

    double lattitude1(); 
    double longtitude1(); 
    double rad_lat(); 
    double rad_long(); 
    double distance_to(const GPScoord& gps); 
    private: 
    double lattitude; 
    double longtitude; 
}; 

#endif 

gps.cc

#include <cstdlib> 
#include <iostream> 
#include <cmath> 
#include <math.h> 
#include "gps.h" 
using namespace std; 

class GPScoord 
{ 
    private: 
    double lattitude; 
    double longtitude; 
    public: 
    GPScoord(double lat,double longt) { 

    lattitude=lat; 
    longtitude=longt; 
    } 

    public: 
    double lattitude1(){ return lattitude; } 
    double longtitude1(){ return longtitude; } 
    double rad_lat(){ return lattitude*M_PI/180; } 
    double rad_long(){ return longtitude*M_PI/180; } 

    double distance_to(const GPScoord& gps){ 
    double R = 6371e3; 
    double radlat = rad_lat(); 
    double ralong = rad_long(); 
    double radlat1 = gps.rad_lat(); 
    double radlong1 = gps.rad_long(); 
    double radlat2 = radlat-radlat1; 
    double radlong2 = ralong-radlong1; 
    double   a = pow((sin(radlat2/2)),2)+cos(radlat)* 
    cos(radlat1)*pow((sin(radlong2)),2); 
    double c=2*atan2(sqrt(a),sqrt(1-a)); 
    return R*c; 
} 

};

我得到以下錯誤:

/tmp/cc13HrVO.o: In function `main': 
/home/mustafa/Desktop/main.cc:14: undefined reference to  `GPScoord::GPScoord(double, double)' 
/home/mustafa/Desktop/main.cc:15: undefined reference to  `GPScoord::GPScoord(double, double)' 
/home/mustafa/Desktop/main.cc:17: undefined reference to `GPScoord::distance_to(GPScoord const&)' 
collect2: error: ld returned 1 exit status 

餘did't理解這個錯誤,12.0不增加一倍或GPS2不上課? 我認爲這個問題是在gps.h中,但我沒有發現這個錯誤。

+0

胡亂猜測,但如果你是,你會得到這個連接錯誤只編譯main.cc。你也可以嘗試'g ++ main.cc gps.cc' – virgesmith

+1

,這裏的代碼格式化很重要,增加了可讀性,因此可以幫助任何可能回答你問題的人 - 現在已經爲你做了一些:) –

回答

1

首先,你需要編譯兩個源文件,就像這樣:

g++ -Wall main.cc gps.cc

然後你會看到你收到重新定義你的類,它是解釋通過定義類here可以固定的錯誤在頭文件中,然後將你的類的方法實現到源文件,而不必重新定義類。

,你會得到這樣的錯誤

後:

gps.cc:21:19: error: member function 'rad_lat' not viable: 'this' argument has 
     type 'const GPScoord', but function is not marked const 
    double radlat = rad_lat(); 
        ^~~~~~~ 

其發生,只是因爲編譯器說,因爲某些功能需要被標記爲const。把它們放在一起,你會得到類似下面的代碼:

gps.h:

#ifndef GPS_H 
#define GPS_H 

class GPScoord { 
    public: 
    GPScoord(double lat, double longt); 

    double lattitude1(); 
    double longtitude1(); 
    double rad_lat() const; 
    double rad_long() const; 
    double distance_to(const GPScoord& gps) const; 
    private: 
    double lattitude; 
    double longtitude; 
}; 

#endif 

gps.cc:

#include <cstdlib> 
#include <iostream> 
#include <cmath> 
#include <math.h> 
#include "gps.h" 
using namespace std; 

GPScoord::GPScoord(double lat,double longt) { 

    lattitude=lat; 
    longtitude=longt; 
} 

double GPScoord::lattitude1(){ return lattitude; } 
double GPScoord::longtitude1(){ return longtitude; } 
double GPScoord::rad_lat() const { return lattitude*M_PI/180; } 
double GPScoord::rad_long() const { return longtitude*M_PI/180; } 

double GPScoord::distance_to(const GPScoord& gps) const { 
    double R = 6371e3; 
    double radlat = rad_lat(); 
    double ralong = rad_long(); 
    double radlat1 = gps.rad_lat(); 
    double radlong1 = gps.rad_long(); 
    double radlat2 = radlat-radlat1; 
    double radlong2 = ralong-radlong1; 
    double   a = pow((sin(radlat2/2)),2)+cos(radlat)* 
    cos(radlat1)*pow((sin(radlong2)),2); 
    double c=2*atan2(sqrt(a),sqrt(1-a)); 
    return R*c; 
} 
+0

謝謝那麼爲什麼一些函數需要標記爲const。 –

+0

因爲否則你會在我的回答中得到我提到的錯誤。標記它表示它不會改變實例@MustafaSavran。不用謝。 – gsamaras