2014-05-01 3 views
0

J'ai un problème avec les opérateurs surchargés en C++. J'ai struct qui représente les nombres complexes et je surcharge les opérateurs, donc je peux faire des calculs avec des nombres complexes. Visual Studio 2012 me donne cette erreur: 1 IntelliSense: aucun opérateur "=!" Correspond à ces opérandes types d'opérandes sont: std :: ostream = ComplexeOpérateur de surcharge << et opérateur! =

mon = code fonction

bool operator!=(const Complex& lhs, const Complex& rhs) 
{ 
    if(lhs.Real() != rhs.Real() || lhs.Imaginary() != rhs.Imaginary()) 
    { 
     return true; 
    } 
    else 
    { 
     return false; 
    } 
} 

! < < Code

std::ostream& operator<<(std::ostream& stream, const Complex& number) 
{ 
    stream << number.Real() << "+" << number.Imaginary() << "i" << endl; 

    return stream; 
} 

principale:

int main() 
{ 
    Complex c1(1,5),c2(5,6); 

    cout << c1 != c2; 

    system("pause"); 

    return 0; 
} 

si je fais bien

cout << (c1 != c2); 

il me donne aucune erreur. Est-ce que quelqu'un sait comment résoudre ce problème sans avoir besoin d'ajouter des parenthèses?

+2

non, voilà comment l'ordre des opérations travailler en C++. C'est comme demander comment vous pouvez obtenir 4 + 5 * 6 pour faire l'addition avant la multiplication - pas possible. –

+1

Et ce qui est avec cette 'if (condition) return true; sinon retournez faux; '? Pourquoi pas la condition de retour plus simple et moins verbeuse; –

+1

Pourquoi le "if" dans l'implémentation de 'operator! =()'? Renvoie juste 'lhs.Real()! = Rhs.Real() || lhs.Imaginary()! = rhs.Imaginary() ' – Manu343726

Répondre

3

Si votre erreur se produit avec

cout << c1 != c2 

c'est une question de priorité. il est analysé comme

(cout << c1) != c2 

si vous ne pouvez vraiment pas supporter l'apparence des parens supplémentaires. vous pourriez faire

cout << operator!=(c1, c2); 

mais je vous attendre à ne se soucient pas beaucoup pour l'aspect de ce soit