Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    [C++] Problema Makefile

    Ho il seguente Makefile:
    codice:
    scacchiera : main.o AbsPezzo.o Casella.o Cavallo.o Posizione.o Squadra.o
    	c++ -o scacchiera main.o AbsPezzo.o Casella.o Cavallo.o Posizione.o Squadra.o
    
    main.o : main.cc
    	c++ -c main.cc -o main.o
    
    Squadra.o : Squadra.cc Squadra.hh
    	c++ -c Squadra.cc -o Squadra.o
    
    Posizione.o : Posizione.cc Posizione.hh
    	c++ -c Posizione.cc -o Posizione.o
    
    Casella.o : Casella.cc Casella.hh
    	c++ -c Casella.cc -o Casella.o
    
    AbsPezzo.o : AbsPezzo.cc AbsPezzo.hh
    	c++ -c AbsPezzo.cc -o AbsPezzo.o
    
    Cavallo.o : Cavallo.cc Cavallo.hh
    	c++ -c Cavallo.cc -o Cavallo.o
    Quando lo eseguo mi produce questo errore:
    error: ISO C++ forbids declaration of 'Casella' with no type
    nel file AbsPezzo.hh, proprio nella riga in cui indico che la classe AbsPezzo ha un puntatore a un oggetto di tipo Casella.
    Non ho indicato qualche dipendenza nel Makefile?

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    E' un errore di compilazione. Nel momento in cui indichi Casella, quella classe non è conosciuta ... devi rivedere gli include ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Ci avevo pensato ma la classe AbsPezzo ha già l'include della classe Casella.
    AbsPezzo.hh:
    codice:
    #ifndef ABSPEZZO_HH
    #define ABSPEZZO_HH
    
    #include "Squadra.hh"
    #include "Posizione.hh"
    #include "Casella.hh"
    
    class AbsPezzo
    {
    
    private:
    
      Squadra *_s;
    
      Casella *_c;
    
    public:
    
      AbsPezzo (Squadra::Colore c);
    
      Squadra::Colore s();
    
      void setC (Casella *c);
    
      virtual bool mossa (const Posizione &destinazione) const = 0;
    
    };
    
    #endif
    Casella.hh:
    codice:
    #ifndef CASELLA_HH
    #define CASELLA_HH
    
    #include "Posizione.hh"
    #include "AbsPezzo.hh"
    
    class Casella
    {
    
    private:
    
      Posizione *_p;
    
      AbsPezzo *_pezzo;
    
    public:
    
      Casella (int x, int y);
      ~Casella();
    
      int x ();
      int y ();
    
      void concatena (AbsPezzo *pezzo);
    
    };
    
    #endif

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462

    Re: [C++] Problema Makefile

    Originariamente inviato da starcraftworld
    nel file AbsPezzo.hh
    Sei sicuro che è in quel file e in quella riga ...?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    In file included from Casella.hh:5,
    from main.cc:5:
    AbsPezzo.hh:15: error: ISO C++ forbids declaration of ‘Casella’ with no type
    AbsPezzo.hh:15: error: expected ‘;’ before ‘*’ token
    AbsPezzo.hh:23: error: ‘Casella’ has not been declared
    make: *** [main.o] Error 1

  6. #6
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Noto un riferimento circolare che potrebbe essere la causa. Per risolverlo modifica casella.hh così:
    codice:
    #ifndef CASELLA_HH
    #define CASELLA_HH
    
    #include "Posizione.hh"
    
    class AbsPezzo; // forward declaration.
    class Casella
    {
    
    private:
    
      Posizione *_p;
    
      AbsPezzo *_pezzo;
    
    public:
    
      Casella (int x, int y);
      ~Casella();
    
      int x ();
      int y ();
    
      void concatena (AbsPezzo *pezzo);
    
    };
    
    #endif
    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.

  7. #7
    Casella.hh:6: error: forward declaration of ‘struct AbsPezzo’

  8. #8
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Quella dichiarazione è corretta (al punto che io modificherei anche AbsPezzo.hh nello stesso modo).
    Modificando ancora il file Casella.hh in:
    codice:
    #ifndef CASELLA_HH
    #define CASELLA_HH
    
    class Posizione; // Forward declaration
    class AbsPezzo; // forward declaration.
    
    class Casella
    {
    
    private:
    
      Posizione *_p;
    
      AbsPezzo *_pezzo;
    
    public:
    
      Casella (int x, int y);
      ~Casella();
    
      int x ();
      int y ();
    
      void concatena (AbsPezzo *pezzo);
    
    };
    
    #endif
    hai ancora errori?
    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.

  9. #9
    Ora non riconosce più Squadra::Colore:
    In file included from AbsPezzo.cc:5:
    AbsPezzo.hh:19: error: expected ‘)’ before ‘c’
    AbsPezzo.hh:21: error: ‘Colore’ in class ‘Squadra’ does not name a type
    AbsPezzo.cc:7: error: expected ‘)’ before ‘c’
    AbsPezzo.cc:13: error: ‘Colore’ in class ‘Squadra’ does not name a type
    make: *** [AbsPezzo.o] Error 1

  10. #10
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Nei vari file.cc devi comunque includere i vari file.hh necessari. La forward declaration ha effetto solo su questi ultimi e si basa sul fatto che il compilatore può definire un puntatore a una classe anche senza sapere com'è fatta. Almeno finché nell'header file non intendi usare quel puntatore, ma non mi pare sia questo il caso.
    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.

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.