2015-12-03 4 views
1

Я использую сплайн-модуль в Eigen и Assertion не удалось, установив тип Spline<double, 1> в качестве переменных-члена. это пример,Eigen Spline module Утверждение

#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; 
} 

комментарий case 1, используя case 2, он отлично работает.

Но комментарий case 2, используя case 1, он терпит неудачу, и это ошибка времени выполнения. это сообщение об ошибке в командной строке,

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

ответ

0

Случай 2 не уступка, а конструктор.

Измени корпус 1 в

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

и он будет строить.

+0

, который работает, поэтому тип сплайна <> требует инициализации при объявлении. Большое спасибо. –