Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [C++] un overload e funzione friend

    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; 
    }

  2. #2
    a prima vista non lo so se dipende da questo, ma le funzioni friend non sono funzioni membro di una classe, sebbene e` possibile dichiararle all'interno di essa.
    Sposta la dichiarazione di friend appena sotto a "class ThreeD {". Inoltre, cambia la dichiarazione dell'oggetto passato in «const ThreeD obj».

    Saluti
    <| http://cikkox.altervista.org |>
    <| GNU/Linux Registered User #365929 |>
    <| GnuPG/OpenPGP key available |>

  3. #3
    niente da fare.. continua a non funzionare!!

    ma ke pizza.. ma cosa li mettono a fare esempi su questi libri se poi non girano!!!

  4. #4
    prova a passargli il secondo parametro come riferimento costante, quindi «const ThreeD& obj».
    strano che non funziona...

    Saluti
    <| http://cikkox.altervista.org |>
    <| GNU/Linux Registered User #365929 |>
    <| GnuPG/OpenPGP key available |>

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Che compilatore hai usato ?

    Con VC6 non ho avuto alcun problema ...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.