[英]Initialize a template object within a class (c++)
我想定義一個基於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復制粘貼了它,而且我也不明白為什么他仍然希望()括號中的類型名稱。 你有什么想法? 非常感謝!
您的錯誤消息:
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);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.