Visualizzazione dei risultati da 1 a 6 su 6

Hybrid View

  1. #1
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Perché due volte class B { etc } ?
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2015
    Messaggi
    4
    a
    Ultima modifica di ale666; 17-05-2015 a 12:45

  3. #3
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    In casi simili non c'è altro modo se non ricorrere alla forward reference e un puntatore. Infatti il compilatore sa com'è fatto un puntatore, ma non com'è definita la classe del puntatore.
    Perché funzioni il tutto è indispensabile che nelle dichiarazioni delle classi (o nell'header file in generale) non si faccia riferimento ai campi (metodi o variabili) della classe incompleta.
    Non serve nemmeno fare un giro strano di include, ma è sufficiente usare la forward reference.
    Gli include necessari dovranno però essere inseriti nei file rispettivi file.cpp prima che metodi o variabili della classe in forward reference siano usati.


    file A.h
    codice:
    class B; // forward reference
    class A {
        static B* punt;
    };
    file B.h
    codice:
    class A; // forward reference
    class B {
        funzione1(A*...);
        funzione2(A*...);
    };
    file A.cpp
    codice:
    #include "A.h"
    #include "B.h"
    // ora il compilatore sa com'è fatta sia A sia B
    // sviluppo funzioni etc.
    B* A::punt = nullptr;
    file B.cpp
    codice:
    #include "B.h"
    #include "A.h"
    // ora il compilatore sa com'è fatta sia A sia B
    // sviluppo funzioni etc.
    B::funzione1(A* arg) {
        arg->metodo_strano();
    }
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2015
    Messaggi
    4
    Quote Originariamente inviata da shodan Visualizza il messaggio
    In casi simili non c'è altro modo se non ricorrere alla forward reference e un puntatore. Infatti il compilatore sa com'è fatto un puntatore, ma non com'è definita la classe del puntatore.
    Perché funzioni il tutto è indispensabile che nelle dichiarazioni delle classi (o nell'header file in generale) non si faccia riferimento ai campi (metodi o variabili) della classe incompleta.
    Non serve nemmeno fare un giro strano di include, ma è sufficiente usare la forward reference.
    Gli include necessari dovranno però essere inseriti nei file rispettivi file.cpp prima che metodi o variabili della classe in forward reference siano usati.


    file A.h
    codice:
    class B; // forward reference
    class A {
        static B* punt;
    };
    file B.h
    codice:
    class A; // forward reference
    class B {
        funzione1(A*...);
        funzione2(A*...);
    };
    file A.cpp
    codice:
    #include "A.h"
    #include "B.h"
    // ora il compilatore sa com'è fatta sia A sia B
    // sviluppo funzioni etc.
    B* A::punt = nullptr;
    file B.cpp
    codice:
    #include "B.h"
    #include "A.h"
    // ora il compilatore sa com'è fatta sia A sia B
    // sviluppo funzioni etc.
    B::funzione1(A* arg) {
        arg->metodo_strano();
    }

    Grazie mille!! sei il migliore... funziona tutto!

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2015
    Messaggi
    4
    Quote Originariamente inviata da shodan Visualizza il messaggio
    Perché due volte class B { etc } ?
    scusa ma ormai non ci vedo più! l'ho modificato

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