2012-11-01 106 views
0

我想重載運算符*爲矩陣 - 向量乘法。這裏是我的向量和矩陣類:C++ ::重載運算符*爲矩陣 - 向量乘法

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]

我想不通出了如何解決問題。

+1

您應該瞭解構造函數初始值設定項列表。 –

回答

3

讓您的訪問函數const,就像這樣:

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

(順便說一句,沒有必要爲了使返回值const;事實上,這是在C++ 11已過時的模式只要保持它的簡單。 )

+0

謝謝!它解決了這個問題。順便一提!如果我從返回值中省略const(返回值也是另一個類而不是內置類型),那麼'lvalue'賦值是合法的,不會? – Rasoul

+0

@Rasoul:我不確定我們是否同意「左值賦值」應該是什麼意思,但實際上,有一小部分常量返回值禁止的構造。儘管如此,我從來沒有見過這樣一種情況,即那會幫助任何人或阻止重大災難。 –