C ++ :: оператор перегрузки * для умножения матрицы на вектор

Я бы хотел перегрузить оператор * для умножения матрицы на вектор. Вот мои классы Vector и Matrix:

class Vec2
{
public:
Vec2(){}
Vec2(const RealNumber& a, const RealNumber& b)
{
a_ = a; b_ = b;
}

Vec2& operator =  (const Vec2& B)
{
a_ = B.a_;
b_ = B.b_;
return(*this);
}

void a(const RealNumber& a){
a_ = a;
}

void b(const RealNumber& b){
b_ = b;
}

const RealNumber a(void){
return(a_);
}

const RealNumber b(void){
return(b_);
}

private:
RealNumber a_,b_;
};

и класс матрицы:

class Mat2x2
{
public:
Mat2x2(){}
Mat2x2(const RealNumber& a,
const RealNumber& b,
const RealNumber& c,
const RealNumber& d)
{
a_ = a; b_ = b; c_ = c; d_ = d;
}

Mat2x2& operator =  (const Mat2x2& B)
{
a_ = B.a_;
b_ = B.b_;
c_ = B.c_;
d_ = B.d_;
return(*this);
}

const RealNumber a(void){
return(a_);
}

const RealNumber b(void){
return(b_);
}

const RealNumber c(void){
return(c_);
}

const RealNumber d(void){
return(d_);
}
// compile time problem with this overloading function
const Vec2 operator * (const Vec2& B) const {
Vec2 result;
result.a(this->a_*B.a()+this->b_*B.b());
result.b(this->c_*B.a()+this->d_*B.b());
return result;
}

private:
RealNumber a_,b_,c_,d_;
};

Я компилирую код с g++ и получите следующую ошибку:

error: passing ‘const rln::Vec2’ as ‘this’ argument of ‘const rln::RealNumber rln::Vec2::a()’ discards qualifiers [-fpermissive]

Я не могу понять, как решить проблему.

0

Решение

Сделайте ваши функции доступа const, вот так:

RealNumber a() const { return a_; }
//             ^^^^^

(Между прочим, нет необходимости делать возвращаемое значение const; фактически это устаревший шаблон в C ++ 11. Просто будь проще.)

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]