Oppure

Loading
20/01/13 10:17
tekdu
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
class Master {
public:
	virtual int splitting()=0;

	virtual list<pair<void*,list<void*> > > shuffle(list<pair<void*,void*> > mapResult)=0;

	void collectMap(list<pair<void*,void*> > mapData){
		pthread_mutex_lock(&lockMap);
		mapResult.merge(mapData);
		cout<<"Master: Data Received!"<<endl;
		nFile--;
		if(nFile==0){
			cout<<"Master: shuffling data..."<<endl;
			this->shuffledData=shuffle(mapResult);
			cout<<"Master: data shuffled"<<endl;
		}
		pthread_mutex_unlock(&lockMap);
	}

};


CLASSE CHE IMPLEMENTA MASTER
KMASTER.H
class KMaster : public Master {
public:
	int splitting();
	list<pair<void*,list<void*> > > shuffle(list<pair<void*,void*> > mapResult);
	KMaster(string path,int numP,int nK):Master(path,numP){	}
};


KMASTER.cpp
int KMaster::splitting(){
	return 0;
}

list<pair<void*,list<void*> > > KMaster::shuffle(list<pair<void*,void*> > mapResult){
	list<pair<void*,list<void*> > > shuffled;
	list<pair<double,double> >::iterator itk = Klusters.begin();
	for(unsigned int i=0;i<Klusters.size();i++) shuffled.push_back(make_pair(&(*(itk)),app[i]));
	return shuffled;
}


PS: ovviamente ho tolto diverso codice, ma il concetto rimane lo stesso.
aaa
20/01/13 13:07
quello che non so come si chiama
Non vorrei sbagliarmi, ma credo non sia possibile dichiarare funzioni template come virtual/pure virtual
aaa
20/01/13 13:36
tekdu
è 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è.
aaa
20/01/13 21:23
TheKaneB
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 20/01/13 21:24
aaa
22/01/13 10:16
tekdu
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 22/01/13 10:17
aaa