2016-08-24 17 views
0
Eigen::VectorXi a, b, aAndb; 
a.resize(10); 
b.resize(0); 
aAndb.resize(10);  

aAndb << a, b; 

上記のコードをお読みください。基本的には、長さが10のベクトル「a」と長さが0のベクトル「b」を持っています。それらを使ってaAndbを作成すると、CommaInitializerクラスのデストラクタでアサーションエラーが発生します。しかし、 'b'の長さが0より大きい場合、エラーはありません。私はEigen 3.2.9を使用しています。これはEigenからの正しい応答ですか、私の使い方が間違っているか?Eigenコンマ初期化子が0ベクトルを受け入れるかどうか

+1

アサーションメッセージはあなたに何を伝えますか? –

+0

eigen_assert == m_xpr.rows()|| m_xpr.cols()== 0) && m_col == m_xpr.cols()&& "コンマの初期化子に渡される係数が少なすぎます(演算子<< ) "); – user3677630

答えて

1

コンマイニシャライザは、並列列を作成します。

​​ :DEVブランチで変更

template<typename OtherDerived> 
CommaInitializer& operator,(const DenseBase<OtherDerived>& other) 
{ 
+ if(other.cols()==0 || other.rows()==0) 
+  return *this; 
    if (m_col==m_xpr.cols()) 

ピーターの答えで(同様に3.1 & 3.2枝ではなく、3.2.9に)リンクされたパッチから

// From Eigen 3.2.9 
/* inserts a matrix expression in the target matrix */ 
template<typename OtherDerived> 
CommaInitializer& operator,(const DenseBase<OtherDerived>& other) 
{ 
    if(other.rows()==0) 
    { 
    m_col += other.cols(); 
    return *this; 
    } 
    ... 

これはhere(Christophのcomment)に宛てられました。

1

あなたが同じ問題を抱えていたと思われる前に他の誰かがhere。リンクをたどると、Eigen 3.1.0へのパッチがあり、コンマのイニシャライザリストに空のベクトルを使用できるようになります。私はこのパッチを自分で試していません。

+0

このパッチはすでに3.2にあります。 – ggael

1

この問題は、最近3.2およびdevelブランチで修正されています。 3.2.10を待つか、3.2ブランチthereの頭を取得することができます。

関連する問題