2014-02-07 30 views
0

我想用C++定义一个动态矩阵,使用Eigen库。首先,我将行数和列数作为输入(nZ),然后在下面的类中定义我的矩阵,但它不允许我使用(nZ)作为行数变量!你有什么想法我该怎么办?如何使用特征库定义动态矩阵?

GetParams Params;

类哈密顿{

公共:
哈密顿();
void SetHam0(double,double,int,double)
virtual〜Hamiltonian();
int nZ = Params.Get_nZ();

private:
Eigen :: MatrixXd U_on = Eigen :: MatrixXd.setZero(nZ,1); Eigen :: MatrixXd Ham0 = Eigen :: MatrixXd.setZero(nZ,nZ); Eigen :: MatrixXd mstar = Eigen :: MatrixXd.setZero(nZ,nZ); Eigen :: MatrixXd U_v = Eigen :: MatrixXd.setZero(nZ,1);

};

+0

'nZ'估值和所有'setZero'调用必须在构造函数中完成。 – Michael

回答

0

计价NZ和在构造函数中的所有矩阵:

class Hamiltonian { 

public: 
Hamiltonian(); 
virtual ~Hamiltonian(); 

private: 
Eigen::MatrixXd U_on; 
Eigen::MatrixXd Ham0; 
Eigen::MatrixXd mstar; 
Eigen::MatrixXd U_v; 
int nZ; 

}; 

Hamiltonian::Hamiltonian() 
{ 
    GetParams Params; 
    nZ = Params.Get_nZ(); 

    U_on = Eigen::MatrixXd.setZero(nZ,1) ; 
    Ham0 = Eigen::MatrixXd.setZero(nZ,nZ) ; 
    mstar = Eigen::MatrixXd.setZero(nZ,nZ) ; 
    U_v = Eigen::MatrixXd.setZero(nZ,1) ; 
} 
+0

谢谢Michael。但如果我这样做,那么每次我打电话给我的课程来访问它的矩阵时,它们就会变成零!我对吗 ? – user3283759

+0

否。构造函数仅调用一次。 – Michael