2016-11-29 20 views
0

QSharedMemory를 사용하여 공유 메모리를 만들고 싶습니다. 그래서 QDataStream을 사용하여 사용자 정의 클래스를 읽고 쓰려고합니다. 하지만 이중 포인터 (float **)를 재정의하는 방법을 모르겠습니다. Qt QSharedMemory 및 QDataStream

(나는 이중 포인터를 사용하는 이유는 OpenCV의 이력서입니다 : 내가 원하는 것보다 더 좋은 방법이 있다면 매트, 추천하십시오)

class ObservationData 
{ 
private: 
    int m_nCameras; 
    cv::Mat** m_matDBRGB; 
    cv::Mat* m_matQueryRGB; 

    unsigned char** dbRGB; 
    unsigned char* queryRGB; 

    int row, col; 
    int m_recogIdx; 

public: 
    ObservationData(); 
    ~ObservationData(); 

    void setNumCameras(const int nCameras); 
    int getNumCameras() const; 

    void setDB_RGB(const unsigned char** rgb); 
    unsigned char** getDB_RGB() const; 

    void setQuery_RGB(const unsigned char* rgb); 
    unsigned char* getQuery_RGB() const; 

    void setRow(const int row); 
    void setCol(const int col); 

    int getRow() const; 
    int getCol() const; 
} 

및 CPP 파일 :

void ObservationData::setNumCameras(const int nCameras) 
{ 
    this->m_nCameras = nCameras; 
} 

int ObservationData::getNumCameras() const 
{ 
    return this->m_nCameras; 
} 

void ObservationData::setDB_RGB(const unsigned char** rgb) 
{ 
    std::memcpy(this->dbRGB, rgb, 
       sizeof(unsigned char) 
       * this->row * this->col * 3 * this->m_nCameras 
       ); 
} 

unsigned char** ObservationData::getDB_RGB() const 
{ 
    return this->dbRGB; 
} 

void ObservationData::setQuery_RGB(const unsigned char* rgb) 
{ 
    std::memcpy(this->queryRGB, rgb, 
       sizeof(unsigned char) 
       * this->row * this->col * 3 
       ); 
} 

unsigned char* ObservationData::getQuery_RGB() const 
{ 
    return this->queryRGB; 
} 

void ObservationData::setRow(const int row) 
{ 
    this->row = row; 
} 

void ObservationData::setCol(const int col) 
{ 
    this->col = col; 
} 

int ObservationData::getRow() const 
{ 
    return this->row; 
} 
int ObservationData::getCol() const 
{ 
    return this->col; 
} 

QDataStream &operator<<(QDataStream &out, const ObservationData &ob) 
{ 
    out << ob.getDB_RGB() << ob.getQuery_RGB(); 

    return out; 
} 

QDataStream &operator>>(QDataStream &in, ObservationData &ob) 
{ 
    unsigned char** dbRGB; 
    unsigned char* queryRGB; 
    //in >> dbRGB >> queryRGB;  ///// ERROR 

    ob.setDB_RGB(dbRGB); 
    ob.setQuery_RGB(queryRGB); 

    return in; 
} 

답변

0

dereference operator을 사용하십시오.

예 :

unsigned char** dbRGB; 
unsigned char* queryRGB; 
in >> *dbRGB; // note the asterisk before 'dbRGB'