2011-09-09 5 views
0

J'ai construit une petite classe représentant un nombre décimal, appelé complexe. Je veux être en mesure de le jeter à doubler, alors voici mon codetypecasts surchargées ne fonctionnent pas

complex.h

public: 
    operator double(); 

Complext.cpp

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

_num est un champ de type double bien sûr

qui semble être d'accord. Le problème est dans une autre classe où j'essaie de lancer un objet complexe en double. C'est ma fonction:

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; 
} 

qui se traduit par invalid cast from type ‘const Complex’ to type ‘double’

Je n'ai aucune idée pourquoi cela arrive. Des idées? Merci!

Répondre

3

Vous devez faire votre operator double une fonction const:

operator double() const; 

et

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

Comme l'erreur indique clairement, l'est pas conversion double pour un const complexe. Définissez simplement votre opérateur de conversion comme ceci:

operator double() const; 

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

Notez le modificateur const à la fin. Vous devriez vraiment chercher des informations sur const-justesse en C++.