salve a tutti..

volevo un aiutino... il mio libro dice che è possibile effettuare l'overload dell'operatore << e che è possibile fargli utilizzare le variabili private della classe dichiarando l'overload come friend della classe.

sino qui non ci piove... poi però presenta questo programma (seguito da altri) e .. il compilatore si rifiuta di compilarlo dicendo:

error C2248: 'x' : cannot access private member declared in
see declaration of 'x'
error C2248: 'y' : cannot access private member declared in
see declaration of 'y'
error C2248: 'z' : cannot access private member declared in class 'ThreeD'
see declaration of 'z'
error C2593: 'operator <<' is ambiguous

sono disperato... perchè non funziona?!?


codice:
#include <iostream> 
using namespace std; 
 
class ThreeD { 
  int x, y, z; // coordinate 3-D - ora private 
public: 
  ThreeD(int a, int b, int c) { x = a; y = b; z = c; } 
  friend ostream &operator<<(ostream &stream, ThreeD obj); 
}; 
 
// Visualizza le coordinate X, Y, Z - inseritore di ThreeD. 
ostream &operator<<(ostream &stream,  ThreeD obj) 
{ 
  stream << obj.x << ", "; 
  stream << obj.y << ", "; 
  stream << obj.z << "\n"; 
  return stream;  // restituisce lo stream 
} 
 
int main() 
{ 
  ThreeD a(1, 2, 3), b(3, 4, 5), c(5, 6, 7); 
 
  cout << a << b << c; 
 
  return 0; 
}