分配空間,我想用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內部使用。 –