Я хочу избежать инициализации объекта Eigen::CholmodDecomposition
каждый раз, когда я хочу решить разреженную систему.Для этого я создал собственный класс.Разреженный решатель инициализируется с классом и затем используется всякий раз, когда это необходимо, без необходимости повторной инициализации.Одна вещь, которую мне нужно сделать позже, - это копирование таких объектов.
Когда я включаю (1) Eigen::CholmodDecomposition
в определение класса и (2) операцию копирования, я получаю ошибки ниже.Если я удаляю либо (без копии, либо без Eigen::CholmodDecomposition
в классе), то ошибки не возникает.
Что я ломаю?Почему это не работает?Как мне сделать эту работу?
#include <RcppEigen.h>
using namespace std;
class TestClass{
public:
Eigen::CholmodDecomposition<Eigen::SparseMatrix<double> > solver;
Eigen::MatrixXd solve(const Eigen::SparseMatrix<double>&,
const Eigen::MatrixXd&);
TestClass(){};
};
Eigen::MatrixXd TestClass::solve(const Eigen::SparseMatrix<double>& A, const Eigen::MatrixXd& b){
solver.compute(A);
return solver.solve(b);
}
//[[Rcpp::export]]
Eigen::MatrixXd cholmodsolver(const Eigen::SparseMatrix<double>& A,
const Eigen::MatrixXd& b){
TestClass test;
TestClass test2 = test;
return test2.solve(A, b);
}
Это дает ошибки:
error: use of deleted function ‘TestClass::TestClass(const TestClass&)’
TestClass test2 = test;
^~~~
note: ‘TestClass::TestClass(const TestClass&)’ is implicitly deleted because the default definition would be ill-formed:
class TestClass{
^~~~~~~~~
error: use of deleted function ‘Eigen::CholmodDecomposition<Eigen::SparseMatrix<double, 0, int> >::CholmodDecomposition(const Eigen::CholmodDecomposition<Eigen::SparseMatrix<double, 0, int> >&)’
^~~~~~~~~~~~~~~~~~~~