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

    [C++] Errore di "dependency dropped"

    Ciao a tutti!
    Ho un problema che non riesco a risolvere,spero davvero che possiate aiutarmi. Ho creato una struttura dati pila con vettore. Ma quando compilo mi dà sempre questo errore: "Circular pilavet <- pilavet.o dependency dropped. creating pilavet.a No such file." Sarò grato a chi mi darà una mano! Eccovi il codice:

    pila.h
    codice:
    #ifndef pila_h
    #define pila_h
    #include <iostream>
    
    using namespace std;
    
    template <class tipoelem>
    class pila {
          public:
                 virtual void creapila()=0;
                 virtual bool pilavuota()=0;
                 virtual tipoelem leggipila()=0;
                 virtual void fuoripila()=0;
                 virtual void inpila(tipoelem)=0;     
          };
          
    #endif
    pilavet.h
    codice:
    #ifndef pilavet_h
    #define pilavet_h
    #include <iostream>
    #include <stdlib>
    
    #include "pila.h"
    #include "nodopila.h"
    
    using namespace std;
    const int maxlung=100;
    
    template <class tipoelem>
    class pilavet: public pila<tipoelem> {
          
          typedef typename pilavet<tipoelem>::nodopila<tipoelem> nodo;
          
          public:
                 pilavet();
                 pilavet(int);
                 void creapila();
                 bool pilavuota();
                 tipoelem leggipila();
                 void fuoripila();
                 void inpila(tipoelem);
          private:
                  nodo pilap[maxlung];
                  int testa;    
                  int dimpila;  
          }
    #endif
          
    template <class tipoelem> //COSTRUTTORE CON DIM FISSA
    pilavet<tipoelem>::pilavet() {
                       dimpila=maxlung;
                       creapila();
                       }
                       
    template <class tipoelem> //COSTRUTTORE CON DIM IN INPUT
    pilavet<tipoelem>::pilavet(int dimensione) {
                         dimpila=dimensione;
                         creapila();
                         }
                      
    template <class tipoelem> //CREAPILA
    pilavet<tipoelem>::creapila() {
                        testa=0;
                        }
                        
    template <class tipoelem> //PILAVUOTA
    bool pilavet<tipoelem>::pilavuota() {
         return (testa==0);
         }
         
    template <class tipoelem> //LEGGIPILA
    tipoelem pilavet<tipoelem>::leggipila() {
             if (testa != 0)
               return (pilap[testa-1].leggielem() );
             }
             
    template <class tipoelem> //FUORIPILA
    void pilavet<tipoelem>::fuoripila() {
                         if (!pilavuota())
                            testa= testa-1;
                         else
                           cout<<"La pila e' vuota\n";
                         }         
                         
    template <class tipoelem> //INPILA
    void pilavet<tipoelem>::inpila (tipoelem elem) {
         if (testa==maxlung)
           cout<<"Non ci sono spazi liberi\n";
         else {
                pilap.scrivielem(elem);
                testa++;          
              }
         
         }

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Perché questo:
    codice:
    typedef typename pilavet<tipoelem>::nodopila<tipoelem> nodo;
    se nodopila lo includi?
    Non è una classe nested di pilavet.
    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.

  3. #3
    Ho dimenticato di aggiungervi anche il codice di nodopila:

    codice:
    #ifndef nodopila_h
    #define nodopila_h
    #include <iostream>
    
    using namespace std
    
    template <class T>
    
    class nodopila {
          public:
                 nodopila();
                 T leggielem();
                 void scrivielem(T);
          private:
                  T elemento;
          
          };
          
    template <class T> //COSTRUTTORE
    nodopila<T>::nodopila() {
                            elemento=0;
                            }
                            
    template <class T>  // LEGGIELEM
    T nodopila<T>::leggielem() {
                             return elemento;
                             }
                             
    template <class T> //SCRIVIELEM
    void nodopila<T>::scrivielem(T elem) {
                              elemento=elem;
                              }
          #endif
    E' da poco che programmo quindi non so molto,infatti non ho capito cosa sia una classe nested. E' comunque era mio intento creare ereditarietà.

  4. #4
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Una classe nested è una classe definita all'interno di un'altra classe.
    codice:
    class Qualcosa {
    
        class Dato {
    
        };
    };
    Dal momento che nodopila è definita esternamente a pilavet, il tuo typedef è sbagliato.
    E' sufficiente:
    codice:
    typedef nodopila<tipoelem> nodo;
    Poi, manca un ; alla fine di pilavet e l'#endif andrebbe spostato alla fine del file dal momento che anche le funzioni sono parte dell'header file pilavet.h
    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.

  5. #5
    Intanto ti ringrazio tanto per gli aiuti che mi stai dando. Ho apportato le correzioni che mi hai detto però, purtroppo, quel maledetto errore c'è sempre!

  6. #6
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Prova a commentare creapila() nei costruttori di pilavet e vedi se compila.

    E poi:
    codice:
    template <class tipoelem> //INPILA
    void pilavet<tipoelem>::inpila (tipoelem elem) {
         if (testa==maxlung)
           cout<<"Non ci sono spazi liberi\n";
         else {
                pilap[ che indice? ].scrivielem(elem);
                testa++;          
              }
         
         }
    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.