C++ 外部函數通過指針修改類成員的值
阿新 • • 發佈:2018-04-26
成功 引用 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++ 外部函數通過指針修改類成員的值