-1

Eigen線形代数ライブラリを使用しています。クラスのコンストラクターに固有ベクトルを割り当てようとして苦労し、それらのベクトルの要素を呼び出しました。

例えば、

#include <Eigen/Dense>
using Eigen::VectorXd;
#include <memory>
using std::unique_ptr;

class Cl
{
public:
    unique_ptr<VectorXd> v;

    Cl(const int n);
    ~Cl(void);
}
Cl::Cl(const int n)
{
    auto v= unique_ptr<VectorXd>(new VectorXd(n));
}
Cl::~Cl(void)
{
    v= nullptr;
}

main(void)
{
    Cl cl(10);

    /* call an element of v how? */

}

たとえば、「cl.v(2)」を使用すると、コンパイラ エラーが発生します (clang++ を使用しています)。

error: type 'unique_ptr<VectorXd>' (aka 'unique_ptr<Matrix<double, Dynamic, 1> >') does
      not provide a call operator

「cl.(*v)(2)」を使用している間

error: expected unqualified-id
        cout << cl.(*v)(2) << endl;

私は c++ を初めて使用するので、ここで非常に基本的なものが欠落している可能性があります。

4

2 に答える 2

2

Eigen::VectorXd v;それ自体を動的に割り当てようとしているのはなぜですか? vの寿命を の寿命を超えて延長clしたくない場合 (実際にそうしなければならない場合) を除き、次の簡単な例に従うことをお勧めします。

#include <Eigen/Dense>
using Eigen::VectorXd;

class Cl
{
public:
   VectorXd v;
    Cl(int n) : v(n) {}
    ~Cl() {}
}

int main()
{
    Cl cl(10);
    for (int i=0; i<10; ++i)
        cl.v(i) = i;
}
于 2019-11-26T08:05:01.217 に答える