Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di edriv
    Registrato dal
    Oct 2004
    Messaggi
    367

    [C++] Header che si includono a vicenda

    Nel mio progetto ho due file header che si includono in questo modo:

    fogwer.h include selectlist.h
    selectlist.h include fogwer.h

    Inoltre ogni file .h ha questa struttura:
    codice:
    #ifndef __SELECTLIST_H_
    #define __SELECTLIST_H_
    
    #include "fogwer.h"
    
    namespace RDE {
    // codice e classi
    }
    #endif
    Quando compilo (con gcc), in selectlist.h (l'ultimo ad essere incluso: fogwer.cpp->fogwer.h->selectlist.h) non mi riconosce nessun simbolo.

    Forse perchè con gli #ifndef ora non puo' includere di nuovo fogwer.h, già incluso da fogwer.cpp? A me il motivo sembra questo.
    Però se tolgo gli #ifndef cominciano gli errori di ridefinizione...

    voi che avete più pratica, potete dirmi dove sbaglio?
    Grazie
    I've got a bike. You can ride it if you like.

  2. #2
    Utente di HTML.it L'avatar di edriv
    Registrato dal
    Oct 2004
    Messaggi
    367
    Lo dico in modo più chiaro.

    La classe Program contiene una SelectList.
    La classe SelectList contiene un puntatore a Program.

    Come risolvo questa "ricorsività"?
    L'unico modo è metterli nello stesso file header?
    I've got a bike. You can ride it if you like.

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2003
    Messaggi
    423
    L'unica è metterli nello stesso header ... Comunque in generale i riferimenti circolari andrebbero evitati e probabilmente puoi evitare il problema semplicemente riprogettando le classi in modo che non siano "annidate" in quel modo.

  4. #4
    Prova a risolvere con le "forward declarations"
    http://en.wikipedia.org/wiki/Circular_dependency

  5. #5
    Utente di HTML.it L'avatar di edriv
    Registrato dal
    Oct 2004
    Messaggi
    367
    Grazie alla fine ho risolto mettendo nello stesso header.

    Riprogettare "eegantemente" probabilmente avrebbe significato un bordello inconcepibile di templates (e ho perso un giorno provandoci).

    Ma il mio progettino è molto più semplice e va benissimo così.
    I've got a bike. You can ride it if you like.

  6. #6

    Ma come hai fatto?

    Piu che altro non riesco a capire come hai fatto a riuscire a creare questo problema.
    Penso che sia il caso di riprogettare il tutto
    :-)

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.