2016-08-27 9 views
0

私は、順列行列を返す関数を書いています。Eigenで順列行列を作成する

/usr/include/eigen3/Eigen/src/Core/util/StaticAssert.h:32: error: static assertion failed: YOU_MIXED_DIFFERENT_NUMERIC_TYPES__YOU_NEED_TO_USE_THE_CAST_METHOD_OF_MATRIXBASE_TO_CAST_NUMERIC_TYPES_EXPLICITLY 
    #define EIGEN_STATIC_ASSERT(X,MSG) static_assert(X,#MSG); 

興味深いことにかの代わりのreturn p;:内部では、ユースケースは、残念ながら、上記のコードは、静的アサーションに引っ掛かり

auto p = my_favourite_permutation(); 
cout << p.toDenseMatrix() << endl; 

のようなものが含まれ、この

PermutationMatrix<Dynamic> my_favourite_permutation() { 
    Eigen::Matrix<uint, Dynamic, 1> x {4, 3, 1, 2, 0}; 
    PermutationWrapper<Eigen::Matrix<uint, Dynamic, 1>> p 
     = PermutationWrapper<Eigen::Matrix<uint, Dynamic, 1>> (x); 
    return p; 
} 

のような何かをします私はreturn p.inverse();それを行う

答えて

1

私はEigenについてよく分かりませんが、PermutationMatrixuintよりも他のタイプのインデックスにデフォルト設定されているようです。 uintを使用する場合は、戻り値のテンプレートパラメータで指定する必要があります。

PermutationMatrix<Dynamic, Dynamic, uint> my_favourite_permutation() { 
    ... 
} 
関連する問題