0

在下面的代码中,我有一个包含 10 个成员的大向量,可以分为 4 个子向量:

data[10]
P=data[0 to 2]
Q=data[3 to 5]
R=data[6 to 6]
S=data[7 to 9]

由于 vectorR只有一个成员,我更喜欢直接从data. 我想对这个值做这个操作:

x.R()=1983.2+x.R();

喜欢我能做什么Q。但是,我收到此错误:

g++ -g -c main.cpp -std=c++11 -larmadillo -DNDEBUG
main.cpp: In member function ‘Super_vector::R_type&& Super_vector::R()’:
main.cpp:38:24: error: cannot bind ‘double’ lvalue to ‘Super_vector::R_type&& {aka double&&}’
         return data(6,6);
                        ^
main.cpp: In function ‘int main()’:
main.cpp:52:7: error: using xvalue (rvalue reference) as lvalue
  x.R()=1983.2+x.R();
       ^
make: *** [all] Error 1

主文件

#include <armadillo>
#include <iostream>

using namespace std;

typedef arma::vec::fixed<10> x_vec;

class Super_vector
{
public:

    x_vec data;

    typedef decltype(std::declval<x_vec>().subvec(0, 2)) P_type;
    typedef decltype(std::declval<x_vec>().subvec(3, 5)) Q_type;
    typedef double R_type;
    typedef decltype(std::declval<x_vec>().subvec(7, 9)) S_type;

    Super_vector(x_vec data_) :
        data(data_)
    {
    }


    inline P_type P()
    {
        return data.subvec(0,2);
    }

    inline Q_type Q()
    {
        return data.subvec(3,5);
    }

    inline R_type&& R()
    {
        return data(6,6);
    }

    inline S_type S()
    {
        return data.subvec(7,9);
    }

};

int main()
{
    Super_vector x({2,3,5,7,11,13,17,19,23,29});
    x.Q()=-x.Q();
    x.R()=1983.2+x.R();
    x.data.print();

    return 0;
}
4

0 回答 0