J'essaie de passer une classe virtuelle pure (DataSource) dans une structure de données personnalisée (AVLTree) qui est membre d'une classe (dataManager) ; la classe virtuelle pure a deux enfants RealTime et Simulation mais je n'ai pas réussi à trouver comment les instancier tous les deux :
AVLTree.h :
public:
T& info;
AVLnode* left;
AVLnode* right;
unsigned int leftHeight;
unsigned int rightHeight;
public:
AVLnode(T&);
};
template <typename T>
class AVLTree {
private:
AVLnode<T>* startNode;
public:
AVLTree(T&);
DataSource.h :
class DataSource {
public:
virtual void readData(std::string&) = 0;
};
}
class RealTime : public DataSource{
...
}
class Simulation : public DataSource{
....
}
DataManager.h :
class DataManager {
private:
DataStruct::AVLTree<DataSource*> dataSource;
}
DataManager.cpp :
DataManager::DataManager(Data::FileType filetype, const std::string& loc, const std::string& name):
dataSource(filetype == Data::RealTime ? &Data::RealTime(loc + name)) : &Data::Simulation(loc+name){}
J'ai essayé d'en faire une fonction pour déterminer le type qui est censé retourner mais j'ai toujours le même problème. Quelqu'un sait-il comment résoudre ce problème ou peut-il m'indiquer quelques pistes ?
Merci beaucoup pour votre temps.
EDIT :
J'ai essayé les deux solutions ci-dessous avec :
- ajouter le nouveau mot-clé
- créer le modèle d'usine
Cependant, je reçois toujours l'avertissement :
les types d'opérandes sont incompatibles (Data::RealTime* et Data::Simulation*) .
voici le code mis à jour :
dataSource(filetype == Data::FileType::RealTime ? new Data::RealTime(loc + name) : new Data::Simulation(loc+name))
// error occured in - new Data::Realtime : (<-here) new Data::Simulation...
Je ne comprends pas pourquoi je suis incapable d'utiliser un opérateur ternaire.