Blady
2018-06-24 09:09:17 UTC
Inherited ambiguous call.
Bonjour,
J'ai une déclaration d'un type objet T et une dérivation DT de ce type
avec une procédure Put surchargée :
1. procedure Test21 is
2.
3. package P is
4. type T is tagged null record;
5. procedure Put (O : T; A : Integer; B : Integer := 0) is null;
6.
7. type DT is new T with null record;
8. procedure Put (O : DT; A : Integer) is null;
9. end P;
10.
11. I : P.DT;
12.
13. begin
14. I.Put (4);
15. end Test21;
La compilation avec GNAT CE 2018 donne :
test21.adb:14:05: ambiguous call to "Put"
test21.adb:14:05: possible interpretation (inherited) at line 7
test21.adb:14:05: possible interpretation at line 8
Ce qui est attendu.
Je tente de masquer de mon programme client de la procédure héritée :
1. procedure Test21 is
2.
3. package P is
4. type T is tagged null record;
5. procedure Put (O : T; A : Integer; B : Integer := 0) is null;
6.
7. type DT is new T with null record;
8. procedure Put (O : DT; A : Integer) is null;
9.
10. private
11. overriding
12. procedure Put (O : DT; A : Integer; B : Integer := 0) is null;
13. end P;
14.
15. I : P.DT;
16.
17. begin
18. I.Put (4);
19. end Test21;
GNAT GPL2017 compile sans broncher mais GNAT CE 2018 envoie :
test21.adb:18:05: ambiguous call to "Put"
test21.adb:18:05: possible interpretation at line 12
test21.adb:18:05: possible interpretation at line 8
Est-ce correct ?
Dans ce cas comment masquer la procédure héritée de mon programme client ?
Merci, Pascal.
Bonjour,
J'ai une déclaration d'un type objet T et une dérivation DT de ce type
avec une procédure Put surchargée :
1. procedure Test21 is
2.
3. package P is
4. type T is tagged null record;
5. procedure Put (O : T; A : Integer; B : Integer := 0) is null;
6.
7. type DT is new T with null record;
8. procedure Put (O : DT; A : Integer) is null;
9. end P;
10.
11. I : P.DT;
12.
13. begin
14. I.Put (4);
15. end Test21;
La compilation avec GNAT CE 2018 donne :
test21.adb:14:05: ambiguous call to "Put"
test21.adb:14:05: possible interpretation (inherited) at line 7
test21.adb:14:05: possible interpretation at line 8
Ce qui est attendu.
Je tente de masquer de mon programme client de la procédure héritée :
1. procedure Test21 is
2.
3. package P is
4. type T is tagged null record;
5. procedure Put (O : T; A : Integer; B : Integer := 0) is null;
6.
7. type DT is new T with null record;
8. procedure Put (O : DT; A : Integer) is null;
9.
10. private
11. overriding
12. procedure Put (O : DT; A : Integer; B : Integer := 0) is null;
13. end P;
14.
15. I : P.DT;
16.
17. begin
18. I.Put (4);
19. end Test21;
GNAT GPL2017 compile sans broncher mais GNAT CE 2018 envoie :
test21.adb:18:05: ambiguous call to "Put"
test21.adb:18:05: possible interpretation at line 12
test21.adb:18:05: possible interpretation at line 8
Est-ce correct ?
Dans ce cas comment masquer la procédure héritée de mon programme client ?
Merci, Pascal.