簡體   English   中英

在類中初始化模板對象(C ++)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM