У меня проблема со следующим фрагментом кода, после некоторых исследований я выделил проблему в отдельную строку, но теперь не уверен, как ее решить.
typedef double ComplexType;
typedef std::complex<ComplexType> Complex;
typedef Eigen::SparseMatrix<Complex, Eigen::ColMajor, long long> SparseMatrixT;
typedef Eigen::SparseVector<Complex, Eigen::ColMajor, long long> SparseVectorC;
typedef Eigen::SparseLU<SparseMatrixT, Eigen::COLAMDOrdering< long long>> SolverT;
SparseVectorC Solve(const Eigen::Ref<const SparseVectorC>& Rhs)
{
auto _Result = m_LU.solve(Rhs); //SolverT m_LU; defined and "prepared" elsewhere
SparseVectorC Result = _Result; // cause error C2512
return Result;
}
ошибка показывает
\eigen\src\core\solve.h(125): ошибка C2512: 'Eigen::internal::evaluator‹ Eigen::SparseVector‹ Complex,0, long long > >': нет подходящего конструктора по умолчанию
Как я могу получить результат в векторе Sparse или Dense (поскольку он не должен быть разреженным, в отличие от Rhs). Размер матрицы (может быть) огромен, поэтому дополнительная копия была бы неприятной.
Переменная _Result, по-видимому, разрежена, однако ни присваивания (с приведением или без приведения) к разреженному или плотному вектору (с использованием доступного метода toDense(), который наверное сделать копию) не работает.