2016-12-14 36 views
1

我在stm32中編寫代碼。基本上,我想從另一個庫訪問布爾數組數據。這是一個AP_Tmxk_LIDARScanner庫存儲數據的頭文件scan.isObstacle這是一個布爾數組。我還做了一個名爲getObstacle()的返回函數。另一個名爲AP_Tmxk_VFH的庫訪問getObstacle()的數據。這可以嗎?或者是在AP_Tmxk_VFH中複製該數組的方法。謝謝你的幫助。C++訪問共享庫的數組數據

AP_Tmxk_LIDARScanner

class AP_Tmxk_LIDARScanner { 
private: 
    struct{ 
     bool isObstacle[180] = {}; //1: unsafe; 0:safe 
     bool available = false; 
    }scan; 
public: 
    AP_Tmxk_LIDARScanner(); 
    void init(); 
    void update(); 

    bool getAvailable() const{ 
     return scan.available; 
    } 
    bool getObstacle() const{ 
     return scan.isObstacle; 
    } 
}; 

AP_Tmxk_VFH.h

class AP_Tmxk_VFH { 
private: 
    struct{ 
     bool Certain_Value[180] = {}; 
    }sector; 

    const AP_Tmxk_LIDARScanner &_lidarscanner; 

public: 
    // Constructor 
    AP_Tmxk_VFH(const AP_Tmxk_LIDARScanner &_lidarscanner); 
    void init(); 
    void update(); 
}; 

AP_Tmxk_VFH.cpp

AP_Tmxk_VFH::AP_Tmxk_VFH(const AP_Tmxk_LIDARScanner &lidarscanner) : 

    _lidarscanner(lidarscanner) 
    {} 

void AP_Tmxk_VFH::update() 
{ 
    if(_lidarscanner.getAvailable()){ 
     sector.Certain_Value = _lidarscanner.getObstacle() 

    } 
} 
+0

你的代碼看起來noneworking。在函數getObstacle()中,你返回的是bool值,它和bool的數組不一樣。 –

+0

希望[it](https://www.tutorialspoint.com/cplusplus/cpp_pointer_to_an_array.htm)可以幫助 –

回答

0

他我修改我的代碼格式。

AP_Tmxk_LIDARScanner.h

class AP_Tmxk_LIDARScanner { 
    private: 
     struct{ 
      bool isObstacle[180]= {}; //1: unsafe; 0:safe 
      bool available = false; 
     }scan; 
    public: 
     AP_Tmxk_LIDARScanner(); 
     void init(); 
     void update(); 

     bool getAvailable() const{ 
      return scan.available; 
     } 
     void getObstacle(int (&array)[180]); 
    }; 

AP_Tmxk_LIDARScanner.cpp

void AP_Tmxk_LIDARScanner::getObstacle(int (&array)[180]) 
{ 
for(int i=0; i<180; i++){ 
    if(scan.isObstacle[i]){ 
     array[i] = (array[i]+1 >= 5) ? 5 : array[i]+1; 
    } 
    else{ 
     array[i] = (array[i]-1 >= 0) ? array[i]-1 : 0; 
    } 
} 
} 

AP_Tmxk_VFH.h

class AP_Tmxk_VFH { 
private: 
    struct{ 
     int Certain_Value[180] = {}; 
    }sector; 

    class AP_Tmxk_LIDARScanner &_lidarscanner; 

public: 
    // Constructor 
    AP_Tmxk_VFH(class AP_Tmxk_LIDARScanner &_lidarscanner); 
    void init(); 
    void update(); 
}; 

AP_Tmxk_VFH.cpp

AP_Tmxk_VFH::AP_Tmxk_VFH(class AP_Tmxk_LIDARScanner &lidarscanner) : 

    _lidarscanner(lidarscanner) 
    {} 

void AP_Tmxk_VFH::update() 
{   
     if(_lidarscanner.getAvailable()){ 
      _lidarscanner.getObstacle(sector.Certain_Value); 
     }    

}