首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >矩阵向量乘法的C++::overloading运算符*

矩阵向量乘法的C++::overloading运算符*
EN

Stack Overflow用户
提问于 2012-11-02 07:41:59
回答 1查看 2.1K关注 0票数 0

我想重载运算符*以进行矩阵向量乘法。下面是我的Vector和Matrix类:

代码语言:javascript
复制
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_;
};

和矩阵类:

代码语言:javascript
复制
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]

我想不出如何解决这个问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-02 07:44:57

将访问器函数设为const,如下所示:

代码语言:javascript
复制
RealNumber a() const { return a_; }
//             ^^^^^

(顺便说一句,不需要将返回值设为const;实际上,这是C++11中的一种过时模式,只需保持简单即可。)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13187183

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档