En gros, j'obtiens des pointeurs sur des instances de "conteneur" mais
dont je ne connais pas le paramètre du template. Par contre, je sais que
le paramètre est toujours une classe dérivée de "base".
En gros, j'obtiens des pointeurs sur des instances de "conteneur" mais dont je ne connais pas le paramètre du template. Par contre, je sais que le paramètre est toujours une classe dérivée de "base".
Vous voyez ce qui cloche ?
Dans conteneur<T> vous ne pouvez manipuler T en tant que valeur, vous devez utiliser soit une référence (T&) soit un poiteur (T*)
et dans ce cas l'attribut t dans un objet de conteneur<base> est une conversion vers base mais ne peut jamais être un objet ni de derive1 ni de derive2 le problème d'édition de lien se trouve alors sur base::f() qui est appelée sans qu'on ai fournit de corps
// virtuel pur car on ne fournit pas de code virtual int f() = 0 ; };
C'est presque une règle de programmation : quand on manipule des objets polymorphes, il faut le faire soit par pointeur soit par référence mais jamais par valeur
Merci.
Fred
Bonjour,
Voilà un petit bout de code qui compile mais qui plante à l'édition des
liens :
En gros, j'obtiens des pointeurs sur des instances de "conteneur" mais
dont je ne connais pas le paramètre du template. Par contre, je sais que
le paramètre est toujours une classe dérivée de "base".
Vous voyez ce qui cloche ?
Dans conteneur<T> vous ne pouvez manipuler T en tant que valeur, vous
devez utiliser soit une référence (T&) soit un poiteur (T*)
et dans ce cas l'attribut t dans un objet de conteneur<base> est une
conversion vers base mais ne peut jamais être un objet ni de derive1 ni
de derive2
le problème d'édition de lien se trouve alors sur base::f() qui est
appelée sans qu'on ai fournit de corps
// virtuel pur car on ne fournit pas de code
virtual int f() = 0 ;
};
C'est presque une règle de programmation : quand on manipule des objets
polymorphes, il faut le faire soit par pointeur soit par référence mais
jamais par valeur
En gros, j'obtiens des pointeurs sur des instances de "conteneur" mais dont je ne connais pas le paramètre du template. Par contre, je sais que le paramètre est toujours une classe dérivée de "base".
Vous voyez ce qui cloche ?
Dans conteneur<T> vous ne pouvez manipuler T en tant que valeur, vous devez utiliser soit une référence (T&) soit un poiteur (T*)
et dans ce cas l'attribut t dans un objet de conteneur<base> est une conversion vers base mais ne peut jamais être un objet ni de derive1 ni de derive2 le problème d'édition de lien se trouve alors sur base::f() qui est appelée sans qu'on ai fournit de corps
// virtuel pur car on ne fournit pas de code virtual int f() = 0 ; };
C'est presque une règle de programmation : quand on manipule des objets polymorphes, il faut le faire soit par pointeur soit par référence mais jamais par valeur