2017-03-16 13 views
2

main.ccC++ 오류 "GPScoord :(double, double) 등등에 대한 정의되지 않은 참조"

#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 

내가이 오류, 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

그렇지 않으면 내 대답에서 언급 한 오류가 발생합니다. const로 표시하면 @MustafaSavran 인스턴스가 변경되지 않는다고 표시됩니다. 천만에요. – gsamaras