Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Errore classe con metodi virtual
Forum - C/C++ - Errore classe con metodi virtual

Avatar
Neo25 (Normal User)
Newbie


Messaggi: 16
Iscritto: 29/09/2011

Segnala al moderatore
Postato alle 22:30
Lunedì, 02/04/2012
Buonasera ho l seguente file in .h

Codice sorgente - presumibilmente C++

  1. #include <iostream>
  2. #include <vector>
  3.  
  4. using namespace std;
  5.  
  6.  
  7.   class QUEUE_MIN_HEAP {
  8.  public:
  9.   virtual int minium()=0;
  10.   virtual void min_heap_insert(int)=0;
  11.   virtual void decrease_key(int,int)=0;
  12.   virtual int extract_min()=0;
  13.    QUEUE_MIN_HEAP(){}
  14.   ~QUEUE_MIN_HEAP(){}
  15.   };
  16.  
  17.  
  18. class Queue_Min_Heap: public QUEUE_MIN_HEAP
  19.   {
  20.     vector <int> coda;
  21.     public:
  22.     int minium(){return coda[0];}
  23.     void min_heap_insert(int);
  24.     void decrease_key(int,int);
  25.     int extract_min();
  26.     int get_size(){return coda.size();}
  27.     void show();  
  28.     Queue_Min_Heap(int n){ coda.resize(n); }
  29.     ~Queue_Min_Heap(){coda.clear();}
  30.     private:    
  31.     void min_heapify(int);
  32.     int parent(int i){ return i/2; }
  33.     int left(int i){ return 2*i+1; }
  34.     int right(int i){ return 2*i+2; }
  35.     void swap(int &,int &);
  36.   };




Questi sono gli errori --->  [Linker error] undefined reference to `vtable for QUEUE_MIN_HEAP'
  ld returned 1 exit status   :(

Grazie in anticipo per l'aiuto :)

PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 22:55
Lunedì, 02/04/2012
Questi:

Codice sorgente - presumibilmente C/C++

  1. void min_heap_insert(int);
  2. void decrease_key(int,int);
  3. int extract_min();



Li hai definiti? Posta anche il resto del sorgente.


Il mio blog: https://piero.dev
PM Quote
Avatar
Neo25 (Normal User)
Newbie


Messaggi: 16
Iscritto: 29/09/2011

Segnala al moderatore
Postato alle 23:06
Lunedì, 02/04/2012
si li ho definiti in un cpp:

Codice sorgente - presumibilmente C++

  1. //Metodo di inserimento nella coda
  2.   void Queue_Min_Heap::min_heap_insert(int key)
  3.   {
  4.    coda.resize(coda.size()+1);
  5.    coda[coda.size()-1]=RAND_MAX;
  6.    decrease_key(coda.size()-1,key);
  7.   }
  8.  
  9.    //Metodo decremento di una chiave  
  10.    void Queue_Min_Heap::decrease_key(int i,int key)
  11.    {
  12.        if(i>coda.size())
  13.        {
  14.          cout<<endl<<endl<<endl<<"  LA POSIZIONE E' INESISTENTE";
  15.        }
  16.      else if(key>coda[i])
  17.      {
  18.       cout<<endl<<endl<<"   ERRORE:la nuova chiave e' maggiore di quella corrente";
  19.       cout<<endl<<endl<<endl;
  20.      }
  21.    else
  22.    {
  23.    /*Ciclo while scambia padre con figlio finchè non si raggiunge la radice
  24.    la radice e il nodo padre è > del figlio */
  25.    coda[i]=key;
  26.      while(i>0 && coda[parent(i)]>coda[i])
  27.      {
  28.       swap(coda[i],coda[parent(i)]);
  29.       i=parent(i);
  30.      }
  31.     }
  32.    }
  33.  
  34.  
  35.   /*Metodo che elimina e estrae l'elemento minimo dall coda*/
  36.   int Queue_Min_Heap::extract_min()
  37.   {  
  38.      int min=coda[0];
  39.      coda[0]=coda[coda.size()-1];
  40.      coda.resize(coda.size()-1);
  41.      min_heapify(0);
  42.      return min;
  43.   }


PM Quote
Avatar
Neo25 (Normal User)
Newbie


Messaggi: 16
Iscritto: 29/09/2011

Segnala al moderatore
Postato alle 23:07
Lunedì, 02/04/2012
minium () sta stesso nella classe visto che era di una riga sola.

PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 16:10
Martedì, 03/04/2012
Prova a definire  ~QUEUE_MIN_HEAP(){} come virtual.


Il mio blog: https://piero.dev
PM Quote
Avatar
Neo25 (Normal User)
Newbie


Messaggi: 16
Iscritto: 29/09/2011

Segnala al moderatore
Postato alle 12:37
Venerdì, 06/04/2012
all improvviso funziona senza nessun cambiamento mmm :hail: grazie dell aiuto cmq :k:

PM Quote