2017-09-01 50 views
-4

にアクセスしようとするが、それは私に次のエラーを与える:エラーは、私は、クラス構造体にアクセスしようとしているクラスの構造体

InternalGpsReceiver.h:

class InternalGpsReceiver { 
    public: 
     static struct gps_data_t gpsdata; 
     InternalGpsReceiver(void); 
}; 

InternalGpsReceiver。 CPP:

InternalGpsReceiver::InternalGpsReceiver(void){ 
    int err = gps_open("localhost", DEFAULT_GPSD_PORT, this->&gpsdata); 
} 

コンパイルエラー:

error: expected unqualified-id before '&' token 
    int err = gps_open("localhost", DEFAULT_GPSD_PORT, this->&gpsdata); 
+4

はあなたが必要とするように見える '&InternalGpsReceiver :: gpsdata'あり。 – user0042

+0

これを試してみると、次のエラーが発生します: 'InternalGpsReceiver :: gpsdata 'への未定義の参照 – ClaudiaGR

+1

' int err = gps_open( "localhost"、DEFAULT_GPSD_PORT、gpsdata);を必要としませんか、またはポインタ: 'int err = gps_open(" localhost "、DEFAULT_GPSD_PORT、&gpsdata);'? – EdChum

答えて

0

構造体を使用する前に初期化する必要があります。詳細な説明はhttp://en.cppreference.com/w/cpp/language/staticを参照してください。

以下は、コンパイルする最小限のコードです。私はgps_data_t、gpsopen、DEFAULT_GPSD_PORTのモックアップを作成しました。

InternalGpsReceiver.h:

#define DEFAULT_GPSD_PORT 8080 

struct gps_data_t { 
    int a; 
    int b; 
}; 

int gps_open(const char *xx, int x, struct gps_data_t *gps){ return 1;} 

class InternalGpsReceiver { 
public: 
    InternalGpsReceiver(void); 
    static gps_data_t gpsdata; 
} 

InternalGpsReceiver.cpp:

#include "InternalGpsReceiver.h" 

// The line that you missed. 
gps_data_t InternalGpsReceiver::gpsdata; 

InternalGpsReceiver::InternalGpsReceiver(void) 
{ 
    int err = gps_open("localhost", DEFAULT_GPSD_PORT, &InternalGpsReceiver::gpsdata); 
}; 


int main() 
{ 
    InternalGpsReceiver x = InternalGpsReceiver(); 
    return 1; 
} 
+0

構造体は内部ライブラリで初期化されます。問題は、「gps_data_t InternalGpsReceiver :: gpsdata;」を入れるのを忘れていたことです。私の.cppに。あなたの答えをありがとうございました。 – ClaudiaGR

関連する問題