Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 3 sur 3
  1. #1
    Membre à l'essai
    Inscrit en
    novembre 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : novembre 2006
    Messages : 79
    Points : 24
    Points
    24

    Par défaut Classe, Constructeur et héritage

    Bonjour,

    Je sais que le F# n'est pas, en principe, conçu pour la poo, mais je convertis actuellement un programme c# en f#, donc dans un premier temps, je convertis mot à mot.

    Et là j'ai apparemment un soucis de syntaxe avec un constructeur primaire (mot clé do) pour ma classe ListingMonitoring, qui est une liste de listes et donc hérite de List<List<string>>

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    open System
    open System.Collections.Generic
    
        type ListingMonitoring(tabNoms : List<string>) = inherit List<List<string>> 
            
            //constructeur primaire
            do self.Add(tabNoms)
                
            //constructeur secondaire    
            new(tabNoms: List<string>, tabIP : List<string>) =
                self.Add(tabNoms)
                self.Add(tabIP)  
                
             //METHODES  
            member Find(numAgregat: int, numElement : int) =
                maListe : List<string>  <- this[numAgregat]
                maListe[numElement]
            
    
            member Add(numAgregat:int, elementAajouter:string)  =
                self[numAgregat].Add(elementAajouter)
           
            member _indiquerTaille() =
                  self[0].Count
    Visual Studio me signale une erreur au niveau du do :
    "Unexepected Keyword 'do" in implementation file"

    Quelqu'un aurait une idée ?
    Je me demande si ce n'est pas ma clause d'héritage qui n'est pas correctement écrite.

    Merci

    PS : Dans un second temps, si j'ai le temps j'utiliserai le paradigme de la programmation fonctionnelle plutôt que des classes, sauf pour l'interface.

  2. #2
    LLB
    LLB est déconnecté
    Membre Expert
    Inscrit en
    mars 2002
    Messages
    962
    Détails du profil
    Informations forums :
    Inscription : mars 2002
    Messages : 962
    Points : 1 160
    Points
    1 160

    Par défaut

    Salut !

    Il y a pas mal de problèmes de syntaxe dans ton code, je te conseille de prendre exemple sur la doc MSDN (ou ailleurs) :
    http://msdn.microsoft.com/en-us/libr...5(VS.100).aspx
    http://msdn.microsoft.com/en-us/libr...5(VS.100).aspx

    Le message d'erreur que tu as n'est pas simple à comprendre, car il est dû à une erreur d'indentation. La ligne inherit devrait être alignée avec les méthodes et le constructeur. Pour satisfaire le compilateur, il faut soit la mettre à la ligne, soit indenter tout le reste (bof). Tu obtiendrais le même message d'erreur si tu écrivais un if de cette façon :
    Code :
    1
    2
    if true then printfn "a"
      printfn "b"
    Pour me familariser un peu avec l'objet de F# (j'utilise peu l'héritage), j'ai voulu faire compiler ton code. Voici le résultat :
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    type ListingMonitoring(tabNoms : List<string>, tabIP : List<string>) as self =
            inherit List<List<string>>()
    
            //constructeur primaire
            do self.Add(tabNoms)
            do self.Add(tabIP)
    
            //constructeur secondaire
            new(tabNoms: List<string>) =
                ListingMonitoring(tabNoms, List())
    
             //METHODES
            member self.Find(numAgregat: int, numElement : int) =
                let maListe = self.[numAgregat]
                maListe.[numElement]
    
            member self.Add(numAgregat:int, elementAajouter:string)  =
                self.[numAgregat].Add(elementAajouter)
    
            member self._indiquerTaille() =
                self.[0].Count

  3. #3
    Membre à l'essai
    Inscrit en
    novembre 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : novembre 2006
    Messages : 79
    Points : 24
    Points
    24

    Par défaut Merci

    Merci pour ta réponse.
    Grâce à cela j'ai pu débugger mon appli.
    @+,

    Hervé

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •