【发布时间】:2020-06-22 11:27:29
【问题描述】:
我使用 Eigen 库来初始化矩阵并进行与对角化等相关的计算。到目前为止,我一直在使用“按值调用”方法,即:
- 我用 MatrixXcd H(N,N) 定义了一个复数双 NxN 矩阵。
- 然后我调用像 SelfAdjointMatrixSolver es(H) 这样的例程。
- 最后我用 es.eigenvalues() 获得了特征值。
现在,我想使用指针动态分配矩阵。我写了以下代码:
#include <iostream>
#include <complex>
#include <cmath>
#include<math.h>
#include<stdlib.h>
#include<time.h>
#include<Eigen/Dense>
#include<fstream>
#include<random>
using namespace std;
using namespace Eigen;
int main()
{
int i,j,k,l;//for loops
MatrixXd *H = NULL;
H = new MatrixXd(10,10);
if (!H)
cout << "allocation of memory failed\n";
else
{
for(i=0;i<10;i++)
{
for(j=0;j<10;j++)
{
H[i][j]=1.0;
}
}
}
return 0;
}
我收到以下错误消息:
In file included from eigen/Eigen/Core:347:0,
from eigen/Eigen/Dense:1,
from test.cpp:7:
eigen/Eigen/src/Core/DenseCoeffsBase.h: In instantiation of ‘Eigen::DenseCoeffsBase<Derived, 1>::Scalar& Eigen::DenseCoeffsBase<Derived, 1>::operator[](Eigen::Index) [with Derived = Eigen::Matrix<double, -1, -1>; Eigen::DenseCoeffsBase<Derived, 1>::Scalar = double; Eigen::Index = long int]’:
test.cpp:32:13: required from here
eigen/Eigen/src/Core/util/StaticAssert.h:32:40: error: static assertion failed: THE_BRACKET_OPERATOR_IS_ONLY_FOR_VECTORS__USE_THE_PARENTHESIS_OPERATOR_INSTEAD
#define EIGEN_STATIC_ASSERT(X,MSG) static_assert(X,#MSG);
^
eigen/Eigen/src/Core/DenseCoeffsBase.h:406:7: note: in expansion of macro ‘EIGEN_STATIC_ASSERT’
EIGEN_STATIC_ASSERT(Derived::IsVectorAtCompileTime,
我应该如何解决这个问题?我的错误是定义指针还是赋值?
【问题讨论】:
-
变量
H不是MatrixXd对象,但*H是。尝试使用(*H)[i][j]。 -
看来这行得通,非常感谢!
标签: c++ pointers eigen dynamic-memory-allocation