DOCUMENTATION EN LIGNE
DE WINDEVWEBDEV ET WINDEV MOBILE

Aide / WLangage / POO (Programmation Orientée Objet)
  • Intitulé de l'erreur
  • Explications
  • Exemple 1
  • Exemple 2
  • Solutions
WINDEV
WindowsLinuxUniversal Windows 10 AppJavaEtats et RequêtesCode Utilisateur (MCU)
WEBDEV
WindowsLinuxPHPWEBDEV - Code Navigateur
WINDEV Mobile
AndroidWidget AndroidiPhone/iPadWidget IOSApple WatchMac CatalystUniversal Windows 10 App
Autres
Procédures stockées
Erreur : Redéfinition de syntaxe
Intitulé de l'erreur
Les méthodes '<méthode>' de la classe '<classe dérivée>' et de la classe de base '<classe de base>' n'ont pas le même prototype. Le compilateur ne peut pas résoudre l'ambiguïté entre une méthode redéfinie et une méthode multisyntaxe.
Explications
Cette erreur est provoquée par l'utilisation de syntaxes différentes pour une méthode de même nom présente à la fois dans une classe de base et une classe dérivée de la classe de base.
En effet, lorsqu'une méthode dans la classe de base et dans la classe dérivée n'a pas le même prototype, le compilateur ne peut pas décider :
  • s'il s'agit d'une erreur dans le code existant.
  • si le comportement attendu est une redéfinition de la méthode. La redéfinition de méthode était disponible dans les versions précédentes.
  • si le comportement attendu est une syntaxe supplémentaire pour la méthode (nouveauté 16).
Pour une méthode redéfinie, la manipulation d'une instance de la classe dérivée exécute toujours les méthodes de la classe dérivée.
Pour une méthode utilisant différents prototypes (multisyntaxe), l'exécution utilisera la meilleure syntaxe trouvée en fonction des paramètres spécifiés.
La redéfinition de méthode et l'utilisation d'une méthode multisyntaxe s'écrivent de la même manière sous l'éditeur de code.
Pour lever cette ambiguïté, le compilateur affiche maintenant cette erreur, afin d'obtenir un code plus clair.

Exemple 1

Une classe dérivée est définie. Cette classe utilise également une méthode de même nom "Méthode1" mais avec un prototype différent : le type du paramètre est différent. Dans ce cas, l'erreur de compilation est affichée.

Exemple 2

Une classe dérivée est définie. Cette classe utilise également une méthode de même nom "Méthode2" mais avec un prototype différent : "Méthode2" de la classe de base n'attend aucun paramètre et "Méthode2" de la classe dérivée attend 2 paramètres. Dans ce cas, l'erreur de compilation est affichée.
Solutions
Trois cas différents peuvent se présenter :
  • 1er cas : C'est effectivement une erreur : les deux méthodes auraient dû avoir le même prototype.
    Solution : Corriger les prototypes
  • 2ème cas : La redéfinition de la méthode avec un prototype différent est voulue.
    Ce fonctionnement correspond au fonctionnement par défaut jusqu'à la version 15.
    • Solution 1 : Ajouter l'attribut d'extension <redéfinition> à la méthode de la classe dérivée.
      PROCEDURE méthode([<Paramètres>]) <redéfinition>
    • Solution 2 : Renommer la méthode de la classe dérivée.
  • 3ème cas : La méthode de la classe dérivée doit être vue comme une syntaxe supplémentaire de la méthode de la classe de base (utilisation du multisyntaxe)
    Solution : Ajouter l'attribut d'extension <multisyntaxe> à la méthode de la classe dérivée.
    Pour plus de détails, consultez La gestion du multisyntaxe.
    PROCEDURE méthode([<Paramètres>]) <multisyntaxe>
Version minimum requise
  • Version 16
Documentation également disponible pour…
Commentaires
Cliquez sur [Ajouter] pour publier un commentaire

Dernière modification : 13/06/2023

Signaler une erreur ou faire une suggestion | Aide en ligne locale