2017-03-16 7 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 

私はこのエラーを認識できませんでした、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

関連する問題