2016-04-20 9 views
0

に固有の4x4のマトリックスの変換:私は(<a href="https://github.com/felixendres/rgbdslam_v2" rel="nofollow">https://github.com/felixendres/rgbdslam_v2</a>)armhfするRGBDSLAMを変換してきたと私は、この関数でエラーに遭遇してきた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; 
} 

行を:だけでなく

QMatrix4x4 qmat(m.data()); 

元のように:

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

は私にエラーを与える:

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

この機能をどのようにして腕で動作させることができますか?

+0

まあ、それはおそらくですか? – Notlikethat

+1

qrealは、ARMではdoubleの代わりにfloatです。それはうまくいかなかった。 –

+1

'Qt'をハックして' qreal == float'を変更して 'Qt'を再構築できますが、行列の各メンバをコピーするサイクルを書くのが簡単です。 – fghj

答えて

0

ポインタをキャストして動作させることはできません。そこ固有のcast方法があるが、あなたはコピーを実行する必要がありますので、それは、一時では動作しません - それで問題だったかキャストがもともとあった理由

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

QMatrix4x4 qmat(mcopy.data());