2015-12-03 1 views
1

J'utilise le module spline dans Eigen, et l'assertion a échoué lorsque j'ai défini le type de Spline<double, 1> comme variables membres. ceci est un exemple,Eigen Spline module Assertion

#include "Eigen/eigen" 
#include "unsupported/Eigen/splines" 
using namespace Eigen; 
class Spline1d 
{ 
    Spline<double, 1> spl1d; 
public: 
    ~Spline1d() {}; 
    Spline1d() {}; 
    Spline1d(const MatrixXd &input) { 
     spl1d = SplineFitting<Spline<double, 1> >::Interpolate(input.row(1), 1, input.row(0)); 
    } 
}; 
int main() 
{ 
    MatrixXd vals(2, 5); 
    vals << 1.0, 2.0, 3.0, 4.0, 5.0, 
      1.0, 2.0, 3.0, 4.0, 5.0; 

    // Spline1d spl(vals);     // case 1 
    Spline<double, 1> spl1d =  // case 2 
     SplineFitting<Spline<double, 1>>::Interpolate(vals.row(1), 1, vals.row(0)); 
    return 0; 
} 

commentaire case 1, en utilisant case 2, il fonctionne très bien.

Mais commentez case 2, en utilisant case 1, il échoue et il est l'erreur d'exécution. c'est le message d'erreur dans la ligne de commande,

Assertion failed: v == T(Value), file d:\onedrive\documents\codes\library\eigen\ 
src/Core/util/XprHelper.h, line 53 

Répondre

0

Cas n ° 2 est pas une cession, mais un constructeur.

Changer votre cas 1 à

Spline1d(const MatrixXd &input) 
: spl1d(SplineFitting<Spline<double, 1> >::Interpolate(input.row(1), 1, input.row(0))){ 
} 

et il va construire.

+0

qui fonctionne, donc le type Spline <> doit être initialisé lors de la déclaration. Merci beaucoup. –