分配空间,我想用malloc
这样使用ValuePtr中()等为Eigen3稀疏矩阵
A.valuePtr() = static_cast<T*>(std::malloc(nnz*sizeof(T)));
A.innerIndexPtr() = static_cast<int*>(std::malloc(nnz*sizeof(int)));
初始化Eigen::SparseMatrix A
,但我得到的错误
error: lvalue required as left operand of assignment
两个语句。万一它很重要,包含这些行的函数将引用Eigen::SparseMatrix<T, Eigen::RowMajor>
。
任何人都可以帮助我吗?我正在使用g ++ 5.2。
编辑: SparseMatrix
类的功能valuePtr
是
inline Scalar* valuePtr() { return &m_data.value(0); }
Scalar
是一个模板参数中。 m_data
是CompressedStorage
类型的受保护变量,其方法value(size_t i)
将参考返回给其内部数据数组的第i个成员。
inline Scalar& value(size_t i) { return m_values[i]; }
所以,我的结论是valuePtr()
返回一个数组的第一元素的地址。那么,我应该可以通过malloc为该数组分配空间。
如果有人有兴趣,我包括一个链接以供参考 - 请84后线,以及131 Eigen3 SparseMatrix class
从未使用过Eigen,但我相当确定这不是初始化特征矩阵的方式。你应该阅读文档。 –
我同意@BaummitAugen,但是我可能建议你完全避免malloc并使用新的和删除(或更好的,一个C++ 11 shared_ptr,或unique_ptr。 –
@JohnBargman我用malloc因为这就是他们在Eigen内部使用。 –