Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

pb VC6 polymorphisme & fct virtuelle

7 réponses
Avatar
Jean-Charles Gibier
Hello,
Mon compilateur (VC6) me renvoie l'erreur suivante :
'class1::function1' : overriding virtual function differs from
'class2::function2' only by return type or calling convention

Or class1 dérive de class2 ET le type renvoyé par function1 dérive de
celui renvoyé par function2.
Je pensais que les conditions étaient suffisantes pour affecter la fonction
virtuelle de la classe parente mais apparament le type de retour doit être
le même que celui la fonction 'super' et ne peut pas être celui d'une classe
dérivée.
Pouvez vous (con|in)firmer ?

Thx
JCG

7 réponses

Avatar
Aurélien Barbier-Accary
Hello,
Mon compilateur (VC6) me renvoie l'erreur suivante :
'class1::function1' : overriding virtual function differs from
'class2::function2' only by return type or calling convention

Or class1 dérive de class2 ET le type renvoyé par function1 dérive de
celui renvoyé par function2.
Je pensais que les conditions étaient suffisantes pour affecter la fonction
virtuelle de la classe parente mais apparament le type de retour doit être
le même que celui la fonction 'super' et ne peut pas être celui d'une classe
dérivée.
Pouvez vous (con|in)firmer ?

Thx
JCG



Bonjour,
il me semble qu'il faudrait retourner des références (ou des pointeurs) dans les
deux fonctions pour que la surcharge soit possible.
Aurélien.

Avatar
Jean-Charles Gibier
"Aurélien Barbier-Accary" a écrit
dans le message de news: 43bcee63$0$21698$
Hello,
Mon compilateur (VC6) me renvoie l'erreur suivante :
'class1::function1' : overriding virtual function differs from
'class2::function2' only by return type or calling convention

Or class1 dérive de class2 ET le type renvoyé par function1 dérive de
celui renvoyé par function2.
Je pensais que les conditions étaient suffisantes pour affecter la
fonction virtuelle de la classe parente mais apparament le type de
retour doit être le même que celui la fonction 'super' et ne peut pas
être celui d'une classe dérivée.
Pouvez vous (con|in)firmer ?

Thx
JCG



Bonjour,
il me semble qu'il faudrait retourner des références (ou des pointeurs)
dans les deux fonctions pour que la surcharge soit possible.
Aurélien.


C'est le cas.
petite digression : en fait j'essaye de compiler le code du serveur
realmedia , comme le code est supposé être valide, j'imagine que l'erreur
peut aussi se situer dans le contexte de la compilation (option, variable
d'environnement).


Avatar
Jean-Marc Bourguet
"Jean-Charles Gibier" writes:

Hello,
Mon compilateur (VC6) me renvoie l'erreur suivante :
'class1::function1' : overriding virtual function differs from
'class2::function2' only by return type or calling convention
^^^^^^^^^

Tu es sur?

Or class1 dérive de class2 ET le type renvoyé par function1 dérive de
celui renvoyé par function2.
Je pensais que les conditions étaient suffisantes pour affecter la fonction
virtuelle de la classe parente mais apparament le type de retour doit être
le même que celui la fonction 'super' et ne peut pas être celui d'une classe
dérivée.


VC6 est peut-etre suffisemment vieux pour ne pas implementer cette
regle.

A+

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org

Avatar
Jean-Charles Gibier
"Jean-Marc Bourguet" a écrit dans le message de news:

"Jean-Charles Gibier" writes:

Hello,
Mon compilateur (VC6) me renvoie l'erreur suivante :
'class1::function1' : overriding virtual function differs from
'class2::function2' only by return type or calling convention
^^^^^^^^^

Tu es sur?


En fait c'est le message générique du manuel la vraie sortie est la
suivante (les sources du projet Helix étant open depuis 2000 je peux être
plus explicite :-) :
error C2555: 'CInOrderPacketDeliveryQueue::peek_front' : overriding virtual
function differs from 'CInorderPacketQueue::peek_front' only by return type
or calling convention

or dans la classe 'CInorderPacketQueue' la déclaration est la suivante :
--------------------8<-----------------------
virtual CQueueEntry* peek_front();

--------------------8<-----------------------
et dans CInOrderPacketDeliveryQueue l'implémentation est celle ci :
--------------------8<-----------------------
public:
virtual InOrderPacketDeliveryEntry* peek_front()
{
if(CInorderPacketQueue::size())
{
return (InOrderPacketDeliveryEntry*)CInorderPacketQueue::peek_front();
}
else
{
return NULL;
}

--------------------8<-----------------------
et enfin je confirme que la classe 'InOrderPacketDeliveryEntry' est bien
fille de 'CQueueEntry'

class InOrderPacketDeliveryEntry
: public CQueueEntry
, public HXListElem
...



Or class1 dérive de class2 ET le type renvoyé par function1 dérive de
celui renvoyé par function2.
Je pensais que les conditions étaient suffisantes pour affecter la
fonction
virtuelle de la classe parente mais apparament le type de retour doit
être
le même que celui la fonction 'super' et ne peut pas être celui d'une
classe
dérivée.


VC6 est peut-etre suffisemment vieux pour ne pas implementer cette
regle.

C'est ce que je subodore mais comme je n'ai (sauf erreur) pas vu de de

contre indication dans le readme,
il va falloir que je me replonge dans les ML ou que je remonte le pb.


Avatar
Jean-Marc Bourguet
"Jean-Charles Gibier" writes:

"Jean-Marc Bourguet" a écrit dans le message de news:

"Jean-Charles Gibier" writes:

Hello,
Mon compilateur (VC6) me renvoie l'erreur suivante :
'class1::function1' : overriding virtual function differs from
'class2::function2' only by return type or calling convention
^^^^^^^^^

Tu es sur?


En fait c'est le message générique du manuel la vraie sortie est la
suivante (les sources du projet Helix étant open depuis 2000 je peux être
plus explicite :-) :
error C2555: 'CInOrderPacketDeliveryQueue::peek_front' : overriding virtual
function differs from 'CInorderPacketQueue::peek_front' only by return type
or calling convention


Mon probleme etait fonction1 et fonction2. On a bien deux fois
peek_front :-)

A+

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org



Avatar
Jean-Charles Gibier
"Jean-Marc Bourguet" a écrit dans le message de news:

"Jean-Charles Gibier" writes:

"Jean-Marc Bourguet" a écrit dans le message de news:

"Jean-Charles Gibier" writes:

Hello,
Mon compilateur (VC6) me renvoie l'erreur suivante :
'class1::function1' : overriding virtual function differs from
'class2::function2' only by return type or calling convention
^^^^^^^^^

Tu es sur?


En fait c'est le message générique du manuel la vraie sortie est la
suivante (les sources du projet Helix étant open depuis 2000 je peux être
plus explicite :-) :
error C2555: 'CInOrderPacketDeliveryQueue::peek_front' : overriding
virtual
function differs from 'CInorderPacketQueue::peek_front' only by return
type
or calling convention


Mon probleme etait fonction1 et fonction2. On a bien deux fois
peek_front :-)



Et je suis bon pour un "work around" :-)
(En fait l'annonce du projet Helix date de 2002 et non 2000)




Avatar
loic.actarus.joly

VC6 est peut-etre suffisemment vieux pour ne pas implementer cette
regle.


C'est le cas
:http://support.microsoft.com/default.aspx?scid=kb;en-us;240862

--
Loïc