Bonjour à tous,

J'ai écrit un module m_allocation pour surcharger la subroutine allocate (traitement des erreurs directement dans la subroutine, initialisation des valeurs...) qui ressemble à ç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
 
module m_allocation
 
private
 
public :: m_allocate
 
interface m_allocate
        module procedure m_allocate_k_i
        module procedure m_allocate_k_r
        ...
end interface
 
contains
 
logical function m_allocate_k_i(array,size,defaultValue)
        integer,dimension(:),allocatable :: array
        integer,intent(in) :: size
        integer,intent(in) :: defaultValue
...
end function m_allocate_k_i
 
...
 
end module m_allocation
Ce module fonctionne.
Mon problème : j'aurais voulu l'étendre à mes types dérivés, définis dans d'autres modules, mais définir leur fonction d'allocation dans leur module comme ceci:

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
 
module m_bar
 
type tBar
      character(len=8) :: name
      real,dimension(2) :: coeff
end type tBar
 
contains
 
logical function m_allocate(array,size)
      type(tBar),dimension(:),allocatable :: array
      integer,intent(in) :: size
...
end function m_allocate
J'obtiens l'erreur suivante:
error #6405: The same named entity from different modules and/or program units cannot be referenced. [M_ALLOCATE]

Je peux supprimer l'erreur en renommant ma fonction m_allocate_bar, mais je perds alors l'intérêt de procédure générique.

Comment puis je résoudre ce problème?

Merci d'avance et bonne journée