2014-10-21 16 views
8

sto sovraccaricare l'operatore < < e >> in C++, ma non può compilare.errore: ‘ostream’ non citarne tipo

Il messaggio di errore è: "errore: 'ostream' non specifica un tipo" Perché ho ricevuto questo errore? Come sistemarlo?

#ifndef COMPLEX_H 
#define COMPLEX_H 
#include <cstdlib> //exit 

#include <istream> 
#include <ostream> 

class Complex{ 
    public: 
    Complex(void); 
    Complex(double a, double b); 
    Complex(double a); 
    double real() const{ 
     return a; 
    } 

    double imag() const{ 
     return b; 
    } 
    friend ostream& operator<<(ostream& out,const Complex& c); 
    friend istream& operator>>(istream& in, Complex& c); 


    private: 
    double a; 
    double b; 
}; 

ostream& operator<<(ostream& out,const Complex& c){ 
    double a=c.real() , b = c.imag(); 
    out << a << "+" << b<<"i"; 
    return out; 
} 

istream& operator>>(istream& in, Complex& c){ 
    in >> c.a>> c.b; 
    return in; 
} 
#endif 

risposta

19

Usa std::ostream e std::istream ovunque.

ostream e istream sono nello spazio dei nomi std

+0

anche suggerito la lettura: [? _Why sta “utilizzando namespace std;” considerato cattiva pratica _] (http://stackoverflow.com/q/1452721/1870232) (se si finisce accidentalmente in 'utilizzando namespace std;' per il vostro costruisce – P0W

+0

ho fatto a sovraccaricare il >> correttamente ho usato questo nel mio main.cpp:!? c Complex(); cin >> c: ma non si compila come bene. – user2741941

+0

@ user2741941 hai usato 'std :: istream & operator >> (std :: istream & a, Complex & c) {...}'? – P0W

4

Us nomi qualificati per i tipi definiti nel namespace std

friend std::ostream& operator<<(std::ostream& out,const Complex& c); 

Sarebbe anche meglio per includere <iostream> invece di due intestazioni separati <istream> e <ostream>