2012-01-11 42 views
8

Tôi có lớp (prototipe) sau đây:C++ std :: stringstream operator << quá tải

class Token 
{ 
public: 
    //members, etc. 
    friend std::stringstream& operator<< (std::stringstream &out, Token &t); 
}; 

Và các nhà điều hành được thực hiện như thế này:

std::stringstream & operator<< (std::stringstream &out, Token &t) 
{ 
    out << t.getValue(); //class public method 
    return out; 
} 

Bây giờ, tôi đang cố gắng để sử dụng nó như thế này:

std::stringstream out; 
Token t; 
//initialization, etc. 

out << t; 

Và VS mang lại cho tôi lỗi, nói rằng không có phù hợp cho < < nhà điều hành. Tôi đang làm gì sai?

+0

Chào mừng bạn đến SO. Khi bạn cung cấp mẫu mã, hãy giữ cho chúng một đoạn mã duy nhất, có thể biên dịch được. Và * luôn * cung cấp đầy đủ các lỗi trình biên dịch. – thiton

Trả lời

12
std::stringstream & operator<< (std::stringstream &out, Token &t) 

nên

std::ostream & operator<< (std::ostream &out, Token const &t) 
+1

chỉ là một câu hỏi, tại sao ostream, và không phải là chuỗi? vì stringstream là thừa kế toán tử << từ ostream? Ngoài ra, là const bắt buộc? –

+0

@dtumaykin: 'const' là không cần thiết, nhưng đó là phong cách tốt. 'ostream' là lớp của các luồng đầu ra, mà dòng' ostringstream' và 'stringstream' xuất phát từ đó. –

+1

Quan sát sự cần thiết của 'người bạn' ở đây: http://stackoverflow.com/questions/15777944/overloading-the-operator-error-c2804-binary-operator-has-too-many-param – VillasV

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