2014-10-21 33 views
8

Tôi đang quá tải các toán tử < < và >> trong C++, nhưng không thể biên dịch được.lỗi: ‘ostream’ không đặt tên là loại

Thông báo lỗi là: "lỗi:‘ ostream ’không nêu tên" Tại sao tôi gặp lỗi này? Làm thế nào để sửa chữa nó?

#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 

Trả lời

19

Sử dụng std::ostreamstd::istream ở khắp mọi nơi.

ostreamistream là trong namespace std

+0

Cũng đề nghị đọc: [? _Why là “using namespace std;” coi thực hành xấu _] (http://stackoverflow.com/q/1452721/1870232) (nếu bạn vô tình kết thúc bằng 'using namespace std;' cho các bản dựng của bạn! – P0W

+0

Tôi đã quá tải >> đúng không? Tôi đã sử dụng nó trong main.cpp của mình: Complex c(); cin >> c; Nhưng nó sẽ không biên dịch thành – user2741941

+0

@ user2741941 Bạn đã sử dụng 'std :: istream & operator >> (std :: istream & in, Complex & c) {...}'? – P0W

4

hệ tên tiêu chuẩn với nhiều loại định nghĩa trong namespace std

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

Sẽ còn tốt hơn để bao gồm <iostream> thay vì hai tiêu đề riêng biệt <istream><ostream>

Các vấn đề liên quan