c ++访问共享库的数组数据

时间:2016-12-14 12:30:28

标签: c++ arrays shared-libraries stm32

我在stm32编码。基本上,我想从另一个库访问bool数组数据。这是AP_Tmxk_LIDARScanner库存储数据的头文件scan.isObstacle,这是一个bool数组。我还创建了一个名为getObstacle()的返回函数。另一个名为AP_Tmxk_VFH的库可以访问getObstacle()的数据。这可以吗?或者在AP_Tmxk_VFH中复制该数组的方法是哪种。谢谢你的帮助。

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()

    }
}

1 个答案:

答案 0 :(得分: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);
      }            

}