我想根据Eigen库定义一个类:
头文件:
#include <Eigen>
using namespace Eigen;
class MatrixV{
public:
MatrixV(double mu, double omega, double delta, double size);
Eigen::MatrixXd getV();
private:
Eigen::MatrixXd V;
Eigen::JacobiSVD<Eigen::MatrixXd, Eigen::NoQRPreconditioner> svd(V, ComputeFullU | ComputeFullV);
};
CPP-文件:
MatrixV::MatrixV(double mu, double omega, double delta, double size){
Eigen::MatrixXd V = MatrixXd::Random(3,3)
}
Eigen::MatrixXd MatrixV::getV(){
return V;
}
通过编译该代码,我的编译器给了我以下错误:
MatrixV.h:14:68: error: 'V' is not a type
Eigen::JacobiSVD<Eigen::MatrixXd, Eigen::NoQRPreconditioner> svd(V,ComputeFullU | ComputeFullV);
MatrixV.h:14:71: error: 'ComputeFullU' is not a type
Eigen::JacobiSVD<Eigen::MatrixXd, Eigen::NoQRPreconditioner> svd(V, ComputeFullU | ComputeFullV);
MatrixV.h:14:84: error: expected ',' or '...' before '|' token
Eigen::JacobiSVD<Eigen::MatrixXd, Eigen::NoQRPreconditioner> svd(V, ComputeFullU | ComputeFullV);
So the main problem seems to be the line
Eigen::JacobiSVD<Eigen::MatrixXd, Eigen::NoQRPreconditioner> svd(V, ComputeFullU | ComputeFullV);
但是我只是从http://eigen.tuxfamily.org/dox/classEigen_1_1JacobiSVD.html复制粘贴它,而且我也不明白为什么他希望()-brackets中的类型名称。你有什么想法?非常感谢!
答案 0 :(得分:3)
您的错误消息:
MatrixV.h:14:68: error: 'V' is not a type
Eigen::JacobiSVD<Eigen::MatrixXd, Eigen::NoQRPreconditioner> svd(V,ComputeFullU | ComputeFullV);
MatrixV.h:14:71: error: 'ComputeFullU' is not a type
Eigen::JacobiSVD<Eigen::MatrixXd, Eigen::NoQRPreconditioner> svd(V, ComputeFullU | ComputeFullV);
MatrixV.h:14:84: error: expected ',' or '...' before '|' token
Eigen::JacobiSVD<Eigen::MatrixXd, Eigen::NoQRPreconditioner> svd(V, ComputeFullU | ComputeFullV);
都是由同一问题引起的。编译器认为您正在声明一个函数,但看起来您想声明一个变量svd
。你应该做的是删除括号,并将其移动到构造函数:
#include <Eigen>
using namespace Eigen;
class MatrixV{
public:
MatrixV(double mu, double omega, double delta, double size);
Eigen::MatrixXd getV();
private:
Eigen::MatrixXd V;
Eigen::JacobiSVD<Eigen::MatrixXd, Eigen::NoQRPreconditioner> svd;
};
并更改构造函数:
MatrixV::MatrixV(double mu, double omega, double delta, double size) {
V = MatrixXd::Random(3,3)
svd.compute(V, ComputeFullU | ComputeFullV);
}