2016-04-20 10 views
0

Ich habe RGBDSLAM wurde die Umstellung auf armhf (https://github.com/felixendres/rgbdslam_v2) und ich habe Fehler mit dieser Funktion zu begegnen:Konvertieren Eigen 4x4 Matrix zu QMatrix4x4

template <typename T > 
QMatrix4x4 eigenTF2QMatrix(const T& transf) 
{ 
    Eigen::Matrix<double, 4, 4, Eigen::RowMajor> m = transf.matrix(); 
    //QMatrix4x4 qmat(static_cast<qreal*>(m.data()) ); (original line) 
    QMatrix4x4 qmat(m.data()); 
    printQMatrix4x4("From Eigen::Transform", qmat); 
    return qmat; 
} 

Die Linie:

QMatrix4x4 qmat(m.data()); 

sowie wie das Original:

QMatrix4x4 qmat(static_cast<qreal*>(m.data()) ); 

gibt mir den Fehler:

error: invalid conversion from 'Eigen::PlainObjectBase<Eigen::Matrix<double, 4, 4, 1> >::Scalar* {aka double*}' to 'int' [-fpermissive] 

Wie kann ich diese Funktion reparieren, um am Arm zu arbeiten?

+0

Nun, das ist vermutlich, warum die Besetzung war es ursprünglich - was war das Problem mit dem? – Notlikethat

+1

qreal ist ein Float anstelle von Double auf ARM. Es hat nicht funktioniert. –

+1

Sie können 'Qt' hacken und' qreal == float' ändern und 'Qt' neu erstellen, aber ein wenig einfacher zu schreiben Zyklus, um jedes Mitglied der Matrix zu kopieren. – fghj

Antwort

0

Sie können einen Zeiger nicht umwandeln und erwarten, dass er funktioniert. Es ist die cast Methode des Eigens, aber es funktioniert nicht mit Provisorien, so dass Sie eine Kopie durchführen müssen:

using Eigen; 
Matrix<qreal, 4, 4, RowMajor> mcopy = m.cast<qreal>(); 

QMatrix4x4 qmat(mcopy.data()); 
Verwandte Themen