Bonjour,
Pour faire court, j'ai créé un objet "Matrix" ayant pour attributs:
- nrow : entier correspondant au nombre de lignes
- ncolumn : entier correspondant au nombre de colonnes
- array : tableau (nrow, ncolumn) contenant les valeurs de la matrice
Tous ces attributs sont privés, et donc non accessibles directement depuis d'autres fichiers. J'ai donc créé des méthodes publiques get et set pour pouvoir y accéder, mais aussi un constructeur qui permet de créer un objet Matrix en faisant:
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 module mod_matrix implicit none public :: Matrix type Matrix integer, private :: nrow integer, private :: ncolumn real(kind = 8), dimension(:,:), allocatable, private :: array contains procedure, private :: set_nrow, set_ncolumn, set_array procedure, public :: get_nrow, get_ncolumn, get_array end type Matrix interface Matrix procedure init end interface Matrix contains type(Matrix) function init(nrow, ncolumn, array) integer, intent(in) :: nrow, ncolumn real(kind = 8), dimension(:,:), allocatable, intent(inout) :: array integer :: ierr allocate(init%array(nrow, ncolumn), stat = ierr) call init%set_nrow(nrow) call init%set_ncolumn(ncolumn) call init%set_array(array) deallocate(array, stat = ierr) return end function init ! ... Toutes les méthodes ... end module mod_matrix
Dans un code de test (juste un main.f90 et le module mod_matrix.f90), ça marche sans problème.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 integer :: nr, nc real, dimension(:,:), allocatable :: A type(Matrix) :: matA ! ... Code pour créer A ... matA = Matrix(nr, nc, A)
Maintenant, lorsque je l'insère dans mon "vrai" programme, j'obtiens cette erreur lorsque je compile :
Quelqu'un saurait m'expliquer pourquoi?
Code : Sélectionner tout - Visualiser dans une fenêtre à part Error: Component 'nrow' at (1) is a PRIVATE component of 'matrix'
Merci d'avance à tous ceux qui me répondront.
PS: en attendant, j'ai rendu ces attributs publiques, mais ce n'est pas le but des objets si je ne m'abuse...
Partager