1. 程式人生 > >C++ 外部函數通過指針修改類成員的值

C++ 外部函數通過指針修改類成員的值

成功 引用 div nta uint8_t 進行 int style 是我

1.問題出現

  我把我的C代碼轉寫成C++。我的代碼中為新建了位置數據的一個類,我本來是通過C代碼解析一個GPS字符串然後為其賦值的。代碼片段如下

//提取NMEA-0183信息
//gpsx:nmea信息結構體
//buf:接收到的GPS數據緩沖區首地址
void GPS_Analysis(nmea_msg *gpsx,uint8_t *buf)
{
    if((strstr((const char *)buf,"$GPRMC")))
        NMEA_GPRMC_Analysis(gpsx,buf);    //GPRMC解析
}

本來傳入的是一個全局的結構體變量,這個代碼沒有問題。

但是現在我傳入的這樣一個變量: 類中一個結構體指針傳入這個函數。

class PACK
{
    public:
         nmea_msg msg;
};

PACK pack;



GPS_Analysis(&pack.msg,Temp_buf);

但是我發現了一個問題,我解析到了數據,但是這個c函數裏面不能通過指針給我的結構體賦值,這就非常蛋疼了。

2.問題解決

  我嘗試吧gps.c中的轉成gps.cpp,然後把這個參數改成了引用傳遞的方式。

void GPS_Analysis(nmea_msg & gpsx,uint8_t *buf)
{
        NMEA_GPRMC_Analysis(&gpsx,buf);    //
GPRMC解析 }

  但是!我tm發現每次成功賦值了一次,第二次就會報segmentation fault。這個讓我更加蛋疼了。

最後我發現了,這個是因為傳入的值,有時候strstr找不到那個參數的位置,返回值null,但是又對null進行了操作,才會出現這個情況。

C++ 外部函數通過指針修改類成員的值