Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    19

    direttiva include ed ereditarietà

    Ciao a tutti!
    Ho un problema con la direttiva include:
    ho 4 file: FiguraGeometrica.h, Triangolo.h, Quadrato.h e Source.cpp.
    i primi tre file contengono le intestazioni di tre classi omonime, inoltre sia Triangolo che Quadrato sono figlie di FiguraGeometrica. Ecco il codice:

    FiguraGeometrica.h:

    codice:
    class FiguraGeometrica { 
    public: 	char* nome; 	
    void disegnaFigura(); 
    };
    Triangolo.h:
    codice:
    #include "FiguraGeometrica.h"
    class Triangolo : public FiguraGeometrica {
    public:
    	void disegnaFigura();
    };
    Quadrato.h:

    codice:
    #include "FiguraGeometrica.h"
    class Quadrato : public FiguraGeometrica{
    
    };
    Source.cpp:

    codice:
    #include "stdafx.h"
    #include "Triangolo.h"
    #include "Quadrato.h"
    #include "stdlib.h"
    
    void FiguraGeometrica ::  disegnaFigura() {
    	printf("Disegna figura geometrica!\n");
    };
    void Triangolo :: disegnaFigura() {
    	printf("Disegna un triangolo!\n");
    };
    
    int _tmain() {
    	
    	
    	
    	FiguraGeometrica * fig=new FiguraGeometrica;
    	Triangolo * tri=new Triangolo;
    	Quadrato * quad=new Quadrato;
    	tri->disegnaFigura();
    	system("PAUSE");
    	
    }
    quando eseguo Source mi dà il seguente errore:

    error C2011: 'FiguraGeometrica' : 'class' type redefinition

    credo perché l'istruzione #include "FiguraGeometrica.h" viene incontrata più volte (essendo stata utilizzata sia in Triangolo.h che in Quadrato.h ). Come posso fare per evitare questo problema?

    Grazie in anticipo!

  2. #2
    Utente di HTML.it L'avatar di mamo139
    Registrato dal
    May 2005
    residenza
    Londra
    Messaggi
    841
    questo perche' dal file Source.cpp l'header FiguraGeometrica.h viene chiamato due volte, una tramite quadrato e una tramite rettangolo.

    Per risolvere:

    codice:
    #ifndef _FIGURA_GEOMETRICA
    #define _FIGURA_GEOMETRICA
    
    class FiguraGeometrica { 
    public: 	char* nome; 	
    void disegnaFigura(); 
    };
    
    #endif
    In questo modo la classe FiguraGeometrica viene definita solo una volta, a prescindere da quante volte #include "FiguraGeometrica.h" compaia nel codice.

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    19
    Perfetto, grazie!

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.