C++ 外部函数通过指针修改类成员的值
生活随笔
收集整理的這篇文章主要介紹了
C++ 外部函数通过指针修改类成员的值
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1.問題出現(xiàn)
我把我的C代碼轉(zhuǎn)寫成C++。我的代碼中為新建了位置數(shù)據(jù)的一個類,我本來是通過C代碼解析一個GPS字符串然后為其賦值的。代碼片段如下
//提取NMEA-0183信息 //gpsx:nmea信息結(jié)構(gòu)體 //buf:接收到的GPS數(shù)據(jù)緩沖區(qū)首地址 void GPS_Analysis(nmea_msg *gpsx,uint8_t *buf) {if((strstr((const char *)buf,"$GPRMC")))NMEA_GPRMC_Analysis(gpsx,buf); //GPRMC解析 }本來傳入的是一個全局的結(jié)構(gòu)體變量,這個代碼沒有問題。
但是現(xiàn)在我傳入的這樣一個變量: 類中一個結(jié)構(gòu)體指針傳入這個函數(shù)。
class PACK {public:nmea_msg msg; };PACK pack;GPS_Analysis(&pack.msg,Temp_buf);但是我發(fā)現(xiàn)了一個問題,我解析到了數(shù)據(jù),但是這個c函數(shù)里面不能通過指針給我的結(jié)構(gòu)體賦值,這就非常蛋疼了。
?
2.問題解決
我嘗試吧gps.c中的轉(zhuǎn)成gps.cpp,然后把這個參數(shù)改成了引用傳遞的方式。
void GPS_Analysis(nmea_msg & gpsx,uint8_t *buf) {NMEA_GPRMC_Analysis(&gpsx,buf); //GPRMC解析 }但是!我tm發(fā)現(xiàn)每次成功賦值了一次,第二次就會報segmentation fault。這個讓我更加蛋疼了。
?最后我發(fā)現(xiàn)了,這個是因為傳入的值,有時候strstr找不到那個參數(shù)的位置,返回值null,但是又對null進行了操作,才會出現(xiàn)這個情況。
轉(zhuǎn)載于:https://www.cnblogs.com/ZQQH/p/8947317.html
總結(jié)
以上是生活随笔為你收集整理的C++ 外部函数通过指针修改类成员的值的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 找回密码
- 下一篇: C语言基本语法——函数