Làm thế nào người ta có thể quá tải một nhà điều hành < < cho một lớp riêng tư lồng nhau như thế này?Toán tử quá tải << cho một lớp riêng lồng nhau có thể?
class outer {
private:
class nested {
friend ostream& operator<<(ostream& os, const nested& a);
};
// ...
};
Khi cố gắng bên ngoài của trình biên dịch lớp bên ngoài than phiền về sự riêng tư:
error: ‘class outer::nested’ is private
và thứ chức năng in e phải là hàm thành viên 'const'. Nếu nó là 'std :: ostream & print (std :: ostream & out) const', thì toán tử' 'có thể chỉ là một dòng:' return obj.print (dest); '. – Nawaz
Tại sao std: ostream cần phải là bạn của Inner? – Mordachai
Bởi vì bạn không thể xác định nó trong 'Bên trong 'ngược lại. (Và nếu nó không được định nghĩa trong 'Inner', bạn có vấn đề là nó không thể truy cập' Inner', bởi vì 'Inner' là một thành viên riêng của' Outer'.) –