0
votes

I am using Eigen library, but the following code fails to compile:

Eigen::SparseMatrix<double, Eigen::ColMajor> test(100, 100);
Eigen::SparseLU<Eigen::SparseMatrix<double, Eigen::ColMajor>, Eigen::COLAMDOrdering<Eigen::DenseIndex>> test_slv;
test_slv.analyzePattern(test);
test_slv.factorize(test);

I am getting the following output:

c:\users\user\source\repos\cartel\cartel\include\eigen\src\core\solvetriangular.h(247): error C2280: 'Eigen::Block &Eigen::Block::operator =(const Eigen::Block &)': attempting to reference a deleted function with [ Derived=Eigen::Matrix ] c:\users\user\source\repos\cartel\cartel\include\eigen\src\core\block.h(143): note: compiler has generated 'Eigen::Block::operator =' here with [ Derived=Eigen::Matrix ] c:\users\user\source\repos\cartel\cartel\include\eigen\src\core\block.h(143): note: 'Eigen::Block &Eigen::Block::operator =(const Eigen::Block &)': function was implicitly deleted because a base class invokes a deleted or inaccessible function 'Eigen::BlockImpl::StorageKind> &Eigen::BlockImpl::StorageKind>::operator =(const Eigen::BlockImpl::StorageKind> &)' with [ Derived=Eigen::Matrix ] and [ XprType=Eigen::Matrix, Derived=Eigen::Matrix ]

1

1 Answers

2
votes

Eigen::COLAMDOrdering needs to have the same index type as SparseMatrix. Try either Eigen::COLAMDOrdering<int> or Eigen::SparseMatrix<double, Eigen::ColMajor, Eigen::DenseIndex>.

If you typedefed your sparse matrix type, you can use Eigen::COLAMDOrdering<SparseType::StorageIndex> (if SparseType depends on a template parameter: typename SparseType::StorageIndex).