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++ - type
Forum - C/C++ - type "" must implement the inherited pure virtual method

Avatar
tekdu (Normal User)
Rookie


Messaggi: 45
Iscritto: 07/04/2010

Segnala al moderatore
Postato alle 11:17
Domenica, 20/01/2013
come da titolo non riesco a capire perchè il compilatore continua a dirmi che non sto implementando il metodo di Master::shuffle.
inoltre per splitting() mi dice che sto facendo un overloading. HELP. :_doubt:

CLASSE VIRTUALE MASTER
MASTER.H
Codice sorgente - presumibilmente C++

  1. class Master {
  2. public:
  3.         virtual int splitting()=0;
  4.  
  5.         virtual list<pair<void*,list<void*> > > shuffle(list<pair<void*,void*> > mapResult)=0;
  6.  
  7.         void collectMap(list<pair<void*,void*> > mapData){
  8.                 pthread_mutex_lock(&lockMap);
  9.                 mapResult.merge(mapData);
  10.                 cout<<"Master: Data Received!"<<endl;
  11.                 nFile--;
  12.                 if(nFile==0){
  13.                         cout<<"Master: shuffling data..."<<endl;
  14.                         this->shuffledData=shuffle(mapResult);
  15.                         cout<<"Master: data shuffled"<<endl;
  16.                 }
  17.                 pthread_mutex_unlock(&lockMap);
  18.         }
  19.  
  20. };



CLASSE CHE IMPLEMENTA MASTER
KMASTER.H
Codice sorgente - presumibilmente C++

  1. class KMaster : public Master {
  2. public:
  3.         int splitting();
  4.         list<pair<void*,list<void*> > > shuffle(list<pair<void*,void*> > mapResult);
  5.         KMaster(string path,int numP,int nK):Master(path,numP){ }
  6. };



KMASTER.cpp
Codice sorgente - presumibilmente C++

  1. int KMaster::splitting(){
  2.         return 0;
  3. }
  4.  
  5. list<pair<void*,list<void*> > > KMaster::shuffle(list<pair<void*,void*> > mapResult){
  6.         list<pair<void*,list<void*> > > shuffled;
  7.         list<pair<double,double> >::iterator itk = Klusters.begin();
  8.         for(unsigned int i=0;i<Klusters.size();i++) shuffled.push_back(make_pair(&(*(itk)),app[i]));
  9.         return shuffled;
  10. }



PS: ovviamente ho tolto diverso codice, ma il concetto rimane lo stesso.

PM Quote
Avatar
quello che non so come si chiama (Normal User)
Rookie


Messaggi: 37
Iscritto: 08/01/2013

Segnala al moderatore
Postato alle 14:07
Domenica, 20/01/2013
Non vorrei sbagliarmi, ma credo non sia possibile dichiarare funzioni template come virtual/pure virtual

PM Quote
Avatar
tekdu (Normal User)
Rookie


Messaggi: 45
Iscritto: 07/04/2010

Segnala al moderatore
Postato alle 14:36
Domenica, 20/01/2013
è vero soltanto per i template definti da te stesso (type T per intendersi).
Infatti la classe Master fa parte di un set di 3 classi astratte , di cui le altre 2 hanno anch'esse una funzione pure virtual con i template. estendendo queste 2 classi ed implementando le relative funzioni virtual non ho avuto problemi.
Il problema si verifica solo con questa classe e non capisco perchè.

PM Quote
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1792
Iscritto: 26/06/2009

Segnala al moderatore
Postato alle 22:23
Domenica, 20/01/2013
si incazza perchè non hai messo "virtual" sulle due funzioni, nell'header della classe figlia.
Se non metti "virtual" il compilatore non capisce che stai implementando una funzione della classe base.

Ultima modifica effettuata da TheKaneB il 20/01/2013 alle 22:24
PM Quote
Avatar
tekdu (Normal User)
Rookie


Messaggi: 45
Iscritto: 07/04/2010

Segnala al moderatore
Postato alle 11:16
Martedì, 22/01/2013
grazie ragazzi alla fine fine il problema era che super/sotto-classe si trovavano in 2 progetti diversi (uso eclipse sotto linux)
e siccome aggiustavo il codice in corso da entrambi le parti ma la libreria l'avevo gia compilata .....:_doubt:
:D troppe canne!

Ultima modifica effettuata da tekdu il 22/01/2013 alle 11:17
PM Quote