IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Fortran Discussion :

bloc interface pour une famille de subroutines


Sujet :

Fortran

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 9
    Points : 6
    Points
    6
    Par défaut bloc interface pour une famille de subroutines
    bonjour,

    je ne trouve pas de doc simple sur le bloc interface. J'ai tenté un truc pour voir mais il n'a jamais marché

    outils
    compilateur g95

    le problème
    gérer une famille de fonction avec un bloc interface. Je reproduis le code schématiquement car je ne peux pas le reproduire ici, il est beaucoup trop long.

    par exemple deux subroutine newA(type1) et newB(type2), que l'on est obligé de coder avec des noms différents et l'envie d'avoir dans mon code le même appel sans distinction.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    call new(type1)
    call new(type2)
    et d'après ce que j'ai compris il fait écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    interface new
    <div style="margin-left:40px">subroutine newA(type1)....
    subroutine newB(type2)....</div>end interface new
    questions
    Où doit se situer la déclaration de l'interface :
    • dans le meme module que les fonctions
      dans un autre module


    Cette structure marche-t-elle?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    module AAA
     
    declaration bloc interface
     
    contains
    <div style="margin-left:40px">
    declaration subroutine newA
    declaration subroutine newB</div>end module AAA
    J'espère avoir été assez clair.
    Merci pour vos réponses

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Août 2006
    Messages
    974
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2006
    Messages : 974
    Points : 1 346
    Points
    1 346
    Par défaut
    L'exemple suivant devrait répondre à tes questions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
     
    module ModuleTypeAetB
       implicit none
     
       type TypeA
          ...
       end type
       type TypeB
          ...
       end type
     
       interface Calc
           module procedure CalcA
           module procedure CalcB
       end interface
     
    contains
     
       function CalcA(t)
          type (TypeA), intent(in) :: t
          ...
       end function CalcA
     
       function CalcB(t)
          type (TypeB), intent(in) :: t
          ...
       end function CalcB
     
    end module
     
    module ModuleTypeC
       implicit none
     
       type TypeC
          ...
       end type
     
       interface Calc
           module procedure CalcC
       end interface
     
    contains
     
       function CalcC(t)
          type (TypeC), intent(in) :: t
          ...
       end function CalcC
     
    end module
     
    program UseCalcABC
       use ModuleTypeAetB
       use ModuleTypeC
       implicit none
     
       type (TypeA) :: A
       type (TypeB) :: B
       type (TypeC) :: C
     
       ...   
     
       R = Calc(A) + Calc(B) + Calc(C)
     
       ...

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Merci pour votre réponse.
    mon soucis est que si je fais ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    26
    27
    28
    module ModuleTypeAetB
       implicit none
     
       type TypeA
          ...
       end type
       type TypeB
          ...
       end type
     
       interface Calc
           module procedure CalcA
           module procedure CalcB
       end interface
     
    contains
     
       function CalcA(t)
          type (TypeA), intent(in) :: t
          ...
       end function CalcA
     
       function CalcB(t)
          type (TypeB), intent(in) :: t
          ...
       end function CalcB
     
    end module
    les types A et B ne sont pas reconnus à l'intérieur de l'interface lors de la compilation
    compilateur g95
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Error: Derived type 'A' at (1) is being used before it is defined
    j'ai éssayé plusieurs façons, mettre l'interface dans un module séparé avec use ModuleAB
    j'ai aussi essayé en ajoutant un use dans la déclaration de fonction, rien ne marche.

    La compilation sans interface marche. Les déclarations dans interface sont strictement indentiques à celle des fonctions.

    Je ne comprend pas d'où vient l'erreur.
    Le fait que j'ai des tableaux avec allocation dynamique et des pointeurs dans mes types peut-il être responsable de l'erreur de compilation?

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Août 2006
    Messages
    974
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2006
    Messages : 974
    Points : 1 346
    Points
    1 346
    Par défaut
    De quel interface parle-tu ? Celle de l'exemple ?

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    un bon exemple du risque de ne pas parler avec un code réel.

    module procedure aaa
    est à écrire tel quel.

    merci pour tout

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2007] Afficher la somme pour une famille
    Par jclm230759 dans le forum Access
    Réponses: 5
    Dernier message: 04/02/2014, 22h01
  2. Réponses: 20
    Dernier message: 30/08/2012, 11h35
  3. [PHP 5.3] [POO] Interface pour une variable
    Par max-mag dans le forum Langage
    Réponses: 3
    Dernier message: 01/02/2012, 11h45
  4. interface pour une bibliothèque
    Par espoireproxy dans le forum SharePoint
    Réponses: 3
    Dernier message: 02/02/2011, 09h25
  5. Réponses: 4
    Dernier message: 02/05/2007, 13h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo