2016-12-14 11 views
1

Я кодирую stm32. В принципе, я хочу получить доступ к данным массива bool из другой библиотеки. Это заголовочный файл хранит данные библиотеки в scan.isObstacle, который является массивом bool. Также я сделал функцию возврата с именем 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

Он я modfiy мой формат кода.

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); 
     }    

} 

 Смежные вопросы

  • Нет связанных вопросов^_^