我正在使用Eigen库,但是以下代码无法编译:
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);
我得到以下输出:
c:\ users \ user \ source \ repos \ cartel \ cartel \ include \ eigen \ src \ core \ solvetriangular.h(247):错误C2280:'Eigen :: Block&Eigen :: Block :: operator =( const Eigen :: Block&)':尝试引用已删除的函数 与 [ Derived = Eigen :: Matrix ] c:\ users \ user \ source \ repos \ cartel \ cartel \ include \ eigen \ src \ core \ block.h(143):注意:编译器在此处生成了'Eigen :: Block :: operator =' 与 [ Derived = Eigen :: Matrix ] c:\ users \ user \ source \ repos \ cartel \ cartel \ include \ eigen \ src \ core \ block.h(143):注意:'Eigen :: Block&Eigen :: Block :: operator =(const Eigen :: Block&)':函数被隐式删除,因为基类调用了已删除或不可访问的函数'Eigen :: BlockImpl :: StorageKind>&Eigen :: BlockImpl :: StorageKind> :: operator =(const Eigen :: BlockImpl :: StorageKind> &)' 与 [ Derived = Eigen :: Matrix ] 和 [ XprType = Eigen :: Matrix, Derived = Eigen :: Matrix ]
答案 0 :(得分:2)
Eigen::COLAMDOrdering
必须具有与SparseMatrix
相同的索引类型。尝试Eigen::COLAMDOrdering<int>
或Eigen::SparseMatrix<double, Eigen::ColMajor, Eigen::DenseIndex>
。
如果您typedef
设置了稀疏矩阵类型,则可以使用Eigen::COLAMDOrdering<SparseType::StorageIndex>
(如果SparseType
取决于模板参数:typename SparseType::StorageIndex
)。