Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Discussione: [C++] Coesistenza

  1. #1
    Utente di HTML.it L'avatar di Yojimbo
    Registrato dal
    Nov 2003
    Messaggi
    104

    [C++] Coesistenza

    Ho un bel problema, ho tre oggetti, ognuno dei quali richiede che gli altri due siano definiti perchè vengono utilizzati al suo interno, ognuno contiene puntatori dell'altro tipo..

  2. #2
    Utente di HTML.it L'avatar di Yojimbo
    Registrato dal
    Nov 2003
    Messaggi
    104
    risolto, ma siccome è una osa lunga se qualcuno vuole sapere come ho fatto me lo chieda

  3. #3
    sarei interessato
    La stupidità umana e l'universo sono infinite.
    Della seconda non sono certo(Einstein)

    Gnu/Linux User

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Anch'io sono interessato!


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Hai fatto una cosa del genere ?

    codice:
    class A;
    class B;
    class C;
    
    class A{
    	B* b;
    	C* c;
    };
    
    class B
    {
    	A* a;
    	C* c;
    };
    
    class C
    {
    	B*b;
    	A*a;
    };

  6. #6
    Utente di HTML.it L'avatar di Yojimbo
    Registrato dal
    Nov 2003
    Messaggi
    104
    se mi spiegate come si fà a inserire il codice in modo diverso dal testo normle ve lo spiego

  7. #7
    scrivi [ CODE ] testo [ /CODE ] ovviamente non lasciare spazio tra la parentesi quadra e CODE

  8. #8
    Utente di HTML.it L'avatar di Yojimbo
    Registrato dal
    Nov 2003
    Messaggi
    104
    scusate per la lunghezza ma ho usato il codice per simulare l'utilizzo che dovevo farne per accertarmi che tutto funzionasse perfetamente

    (la faccina che ride è [faccine di merda])

    a.h:
    codice:
    #ifndef _a
    #define _a
    
    #include "object.h"
    #include "c.h"
    
    class a : public object {
        public:
        a();
        
        void print();
        
        void set_b( object * );
        
        object *B;
    };
    
    #endif
    a.cpp
    codice:
    #include "a.h"
    
    a::a(){}
    
    void a::print() {
        printf("a\n");
    }
    
    void a::set_b( object *ptr ) {
        B = ptr;
        ((b*)ptr)->print();
    }
    b.h
    codice:
    #ifndef _b_
    #define _b_
    
    #include "object.h"
    
    #include "a.h"
    #include "c.h"
    
    class b : public object {
        
        public:
        b();
        
        void print();
        void set_a( object * );
        void set_c( object * );
        
        object *A;
        object *C;
    };
    
    #endif
    b.cpp
    codice:
    #include "b.h"
    
    b::b() {}
    
    void b::print() {
        printf("protocol\n");
    }
    
    void b::set_c( object *ptr ) {
        C = ptr;
        ((c*)ptr)->print();
    }
    
    void b::set_a( object *ptr ) {
        A = ptr;
        ((a*)ptr)->print();
    }
    c.h
    codice:
    #ifndef _c_
    #define _c_
    
    #include "object.h"
    
    #include "a.h"
    #include "b.h"
    
    struct c : public object {
        public:
        
        c();
        
        void print();
        void set_b( object * );
        void set_a( object * );
        
        object *A;
        object *B;
    };
    
    #endif
    codice:
    #include "c.h"
    
    c::c(){}
    
    void c::print() {
        printf("c\n");
    }
    
    void c::set_b( object *ptr ) {
        B = ptr;
        ((b*)ptr)->print();
    }
    
    void c::set_a( object *ptr ) {
        A = ptr;
        ((a*)ptr)->print();
    }
    object.h
    codice:
    #ifndef _object_
    #define _object_
    
    #include <stdio.h>
    
    class object {};
    
    #endif
    main.cpp
    codice:
    #include "a.h"
    #include "b.h"
    #include "c.h"
    
    int main() {
        a *A = new a();
        b *B = new b();
        c *C = new c();
        
        B->set_a(A);
        B->set_c(C);
    }

  9. #9
    facevi molto prima a usare le forward declaration come detto prima però senza usare l'ereditarietà.

  10. #10
    Utente di HTML.it L'avatar di Yojimbo
    Registrato dal
    Nov 2003
    Messaggi
    104
    un ereditarietà di quel tipo c'è già nel mio programma quindi non ho problemi, in effetti non ci avevo pensato alla forward declaration...e dato che al momento ho anche la febber , bye bye io stacco

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.