Mais bien sûr ça ne fonctionne pas, j'ai les messages d'erreur suivants
(BCB6)
[C++ Erreur] _algo.h(65): E2034 Impossible de convertir 'ObjetBase *' en
'const ObjetThumb *'
[C++ Erreur] _algo.h(65): E2342 Mauvaise correspondance de type dans le
paramètre '__x' ('const ObjetThumb * const &' désiré, 'ObjetBase *'
obtenu)
Alors du coup je suis obligé de déclarer DrawThumb et DrawText virtuelles
dans ObjetBase, alors qu'elles ne sont utilisées respectivement que dans
ObjetThumb et ObjetText.
Y a-t-il moyen de faire autrement?
Sinon par rapport au même cas de figure, existe-il un pattern quelconque,
ou une méthode à suivre, pour m'assurer que les ObjetThumb sont bien
utilisés par ListeThumb et ObjetText par ListeText?
Des fois se procurer et lire un bon bouquin sur le sujet qu'on ne comprends pas (ici C++) ça peut éviter de faire si mal aux autres et ça peut vous faire du bien.
Des fois se procurer et lire un bon bouquin sur le sujet
qu'on ne comprends pas (ici C++) ça peut éviter de faire
si mal aux autres et ça peut vous faire du bien.
Des fois se procurer et lire un bon bouquin sur le sujet qu'on ne comprends pas (ici C++) ça peut éviter de faire si mal aux autres et ça peut vous faire du bien.
Fabien LE LEZ
On Fri, 20 Jan 2006 14:15:35 +0100, Fabien LE LEZ :
class ListeObjetsThumb : public ListeBase<ObjetThumb> { public: void CreateObject() { ObjetThumb * objet = new ObjetThumb(); AddObject(objet); //Gestion de la représentation sous forme graphique de l'objet } };
Comme ça la vérification de type se fait à la compilation.
class ListeObjetsThumb : public ListeBase<ObjetThumb>
{
public:
void CreateObject()
{
ObjetThumb * objet = new ObjetThumb();
AddObject(objet);
//Gestion de la représentation sous forme graphique de l'objet
}
};
Comme ça la vérification de type se fait à la compilation.
class ListeObjetsThumb : public ListeBase<ObjetThumb> { public: void CreateObject() { ObjetThumb * objet = new ObjetThumb(); AddObject(objet); //Gestion de la représentation sous forme graphique de l'objet } };
Comme ça la vérification de type se fait à la compilation.
class ListeObjetsThumb : public ListeBase<ObjetThumb> { public: void CreateObject() { ObjetThumb * objet = new ObjetThumb(); AddObject(objet); //Gestion de la représentation sous forme graphique de l'objet } };
Comme ça la vérification de type se fait à la compilation.
J'avais pensé à la même chose...
Seulement j'ai du coup un autre souci:
J'ai la classe suivante:
template <class T> class ListeBase { };
class ListeThumb : public ListeBase<ObjetThumb> { };
class ListeText : public ListeBase<ObjetText> { };
enum DisplayMode { dmThumb , dmText };
class Form { private: boost::scoped_ptr<???> liste; void ChangeDisplay(DisplayMode dm) { if (dm == dmThumb) { liste.reset(new ListeThumb()); } else { liste.reset(new ListeText()); } } };
Seulement je ne sais pas quoi mettre au niveau de la définition de liste. La seule solution que j'ai trouvé, mais je ne sais pas si c'est la bonne, c'est de créer une classe de base pour ListeBase avec les fonctions publiques de ListeBase en virtuel.
class ListeObjetsThumb : public ListeBase<ObjetThumb>
{
public:
void CreateObject()
{
ObjetThumb * objet = new ObjetThumb();
AddObject(objet);
//Gestion de la représentation sous forme graphique de
l'objet
}
};
Comme ça la vérification de type se fait à la compilation.
J'avais pensé à la même chose...
Seulement j'ai du coup un autre souci:
J'ai la classe suivante:
template <class T>
class ListeBase
{
};
class ListeThumb : public ListeBase<ObjetThumb>
{
};
class ListeText : public ListeBase<ObjetText>
{
};
enum DisplayMode { dmThumb , dmText };
class Form
{
private:
boost::scoped_ptr<???> liste;
void ChangeDisplay(DisplayMode dm)
{
if (dm == dmThumb)
{
liste.reset(new ListeThumb());
}
else
{
liste.reset(new ListeText());
}
}
};
Seulement je ne sais pas quoi mettre au niveau de la définition de liste.
La seule solution que j'ai trouvé, mais je ne sais pas si c'est la bonne,
c'est de créer une classe de base pour ListeBase avec les fonctions
publiques de ListeBase en virtuel.
class ListeObjetsThumb : public ListeBase<ObjetThumb> { public: void CreateObject() { ObjetThumb * objet = new ObjetThumb(); AddObject(objet); //Gestion de la représentation sous forme graphique de l'objet } };
Comme ça la vérification de type se fait à la compilation.
J'avais pensé à la même chose...
Seulement j'ai du coup un autre souci:
J'ai la classe suivante:
template <class T> class ListeBase { };
class ListeThumb : public ListeBase<ObjetThumb> { };
class ListeText : public ListeBase<ObjetText> { };
enum DisplayMode { dmThumb , dmText };
class Form { private: boost::scoped_ptr<???> liste; void ChangeDisplay(DisplayMode dm) { if (dm == dmThumb) { liste.reset(new ListeThumb()); } else { liste.reset(new ListeText()); } } };
Seulement je ne sais pas quoi mettre au niveau de la définition de liste. La seule solution que j'ai trouvé, mais je ne sais pas si c'est la bonne, c'est de créer une classe de base pour ListeBase avec les fonctions publiques de ListeBase en virtuel.