2011-09-09 70 views
0

我已經構建了一個小類,它表示一個十進制數,稱爲Complex。 我希望能夠施展它的兩倍,所以這裏是我的代碼重載類型轉換不起作用

Complex.h

public: 
    operator double(); 

Complext.cpp

Complex::operator double() 
{ 
return _num; 
} 

_num當然

的double類型的字段

這似乎是好的。問題出在另一個類,我實際上試圖將一個複雜的對象轉換爲double。這是我的功能:

const RegMatrix& RegMatrix::operator *= (double num) 
{ 
    Complex factor(num); 
    for(int i=0; i<_numRow; i++) 
    { 
     for(int j=0; j<_numCol; j++) 
     { 
      Complex temp = _matrix[i][j]; 
      _matrix[i][j] = (double) (temp * factor); //<---ERROR HERE 
     } 
    } 
    return *this; 
} 

導致invalid cast from type ‘const Complex’ to type ‘double’

我不知道爲什麼會發生。有任何想法嗎? 謝謝!

回答

3

你需要讓你的operator double一個const功能:

operator double() const; 

Complex::operator double() const { 
    return _num; 
} 
1

正如錯誤中明確規定,在沒有轉換爲常量複雜一倍。簡單地定義您的轉換運算符,如下所示:

operator double() const; 

Complex::operator double() const 
{ 
    return _num; 
} 

注意const修飾符的末尾。你應該真的在C++中尋找關於const正確性的信息。