Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2003
    Messaggi
    178

    [C++] classi friend e loop

    Ciao a tutti!
    sto creando un progetto col borland c++ 6 e ho un problema di "comunicazione" tra due classi...
    eccovi il codice del mio caso
    codice:
     in A.h
    class A 
    {
        private:
                bla bla;
        public:
                bla bla;
                metodo(class B&);
    };
    
    -------
    
    in B.h
    
    #include "A.h"
    class B
    {
            friend class B;      
            private:
                  A a1;
                  A a2;
                  int k;
            public:
                 bla bla;
    };
    in sostanza io vorrei che il metodo di A leggesse l'attributo privato k di B ma così facendo non ci riesco perché mi dice (in A) che la struttura di B è sconosciuta...
    se aggiungo #include "B.h" mi dice che ho dichiarazioni multiple di B, stesso errore se provo a dichiarare solo "class B;" sopra la dichiarazione di A....

    come posso risolvere?

    spero di essere stato chiaro...


    Grazie a tutti!
    ∇•E=ρ/ε ; ∇•B=0 ; ∇xE=-∂B/∂t ; ∇xB=μJ+με∂E/∂t....e ho detto tutto!
    Nessun sistema è sicuro se c'è un idiota a gestirlo!
    Coltiva Linux che Windows si pianta da solo!

  2. #2
    In A.h:
    codice:
    #ifndef _A_
    #define _A_
    //Forward declaration
    class B;
    class A
    {
        private:
                bla bla;
        public:
                bla bla;
                metodo(class B&);
    };
    #endif
    In B.h:
    codice:
    #ifndef _B_
    #define _B_
    #include "A.h"
    class B
    {
            friend class A;
            private:
                  A a1;
                  A a2;
                  int k;
            public:
                 bla bla;
    };
    #endif
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2003
    Messaggi
    178
    non va...si ferma sul metodo di A dicendo che l'attributo (privato di B) non è un membro della classe B perché il tipo non è ancora definito, nonostante abbia aggiunto il "class A" e abbia spostato gli #endif ...

    edit
    l'accesso viene fatto comunque con il . o con il -> giusto ?
    ∇•E=ρ/ε ; ∇•B=0 ; ∇xE=-∂B/∂t ; ∇xB=μJ+με∂E/∂t....e ho detto tutto!
    Nessun sistema è sicuro se c'è un idiota a gestirlo!
    Coltiva Linux che Windows si pianta da solo!

  4. #4
    Sposta il corpo del metodo dal file A.h al file A.cpp, avendo cura di includere anche B.h.
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2003
    Messaggi
    178
    Originariamente inviato da MItaly
    Sposta il corpo del metodo dal file A.h al file A.cpp, avendo cura di includere anche B.h.
    il corpo del metodo è già nel file A.cpp...
    cosa intendi per "includere anche B.h" ?
    se intendi il mettere un #include "B.h" in A.h già mi da errori di dichiarazioni multiple di B...



    grazie per le risposte tempestive
    ∇•E=ρ/ε ; ∇•B=0 ; ∇xE=-∂B/∂t ; ∇xB=μJ+με∂E/∂t....e ho detto tutto!
    Nessun sistema è sicuro se c'è un idiota a gestirlo!
    Coltiva Linux che Windows si pianta da solo!

  6. #6
    Posta tutto il codice di A.h e B.h.
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2003
    Messaggi
    178
    ti ringrazio della disponibilità MItaly, ma ho risolto creando un metodo friend di B che chiama il metodo di A e non l'intera classe

    grazie ancora!
    ∇•E=ρ/ε ; ∇•B=0 ; ∇xE=-∂B/∂t ; ∇xB=μJ+με∂E/∂t....e ho detto tutto!
    Nessun sistema è sicuro se c'è un idiota a gestirlo!
    Coltiva Linux che Windows si pianta da solo!

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 © 2024 vBulletin Solutions, Inc. All rights reserved.