defaria@hpclapd.HP.COM (Andy DeFaria) (09/13/90)
I have been trying to use defered constants in Ada and I have been have
some problems. Everything seems to be OK if the type of the defered
constant is local but if the type is imported then the compiler issues the
error message that follows:
----HP Ada/800 A.04.35------------------------------------------------------
Source file : /tmp/note.ads
In Ada library: /tmp/adalib Next message at line: 18
-------------------------------------------------------------------------------
1 package PACKAGE_ONE is
2
3 type EXPORTED_TYPE is private;
4
5 private
6 type EXPORTED_TYPE is new STANDARD.INTEGER;
7
8 end PACKAGE_ONE;
9
10 with UNCHECKED_CONVERSION;
11 with PACKAGE_ONE;
12
13 package PACKAGE_TWO is
14
15 type LOCAL_TYPE is private;
16
17 DEFFERED_CONSTANT_1 : constant LOCAL_TYPE;
18 DEFFERED_CONSTANT_2 : constant PACKAGE_ONE.EXPORTED_TYPE;
<--------------------------1--------------------------->
1 **SEM 3018 A constant must be initialised - RM 3.2.1 (2).
19
20 private
21 function CONVERT is new UNCHECKED_CONVERSION
22 (SOURCE => INTEGER, TARGET => PACKAGE_ONE.EXPORTED_TYPE);
23
24 type LOCAL_TYPE is new STANDARD.INTEGER;
25
26 DEFFERED_CONSTANT_1 : constant LOCAL_TYPE
27 := 0;
28 DEFFERED_CONSTANT_2 : constant PACKAGE_ONE.EXPORTED_TYPE
29 := CONVERT (0);
30
31 end PACKAGE_TWO;
One error detected. No warning issued. Compilation failed.
Faulty line is:
-------------------------------------------------------------------------------
**:18
One error detected. No warning issued. Compilation failed.
The real question is why is DEFFERED_CONSTANT_1 OK while
DEFFERED_CONSTANT_2 wrong?defaria@hpclapd.HP.COM (Andy DeFaria) (09/14/90)
>/ hpclapd:comp.lang.ada / defaria@hpclapd.HP.COM (Andy DeFaria) / 2:00 pm Sep 12, 1990 / >I have been trying to use defered constants in Ada and I have been have >some problems. Everything seems to be OK if the type of the defered >constant is local but if the type is imported then the compiler issues the >error message that follows: Thanks for the email responses to this question. It turns out that this is explicitly forbidden by the Ada LRM 7.4 (4) with states that the type mark for the defered constant must but declared in the same package. Stupid me! I know RTFM, RTFM, RTFM....
stt@inmet.inmet.com (09/14/90)
Re: Deferred Constants in Ada Quoting from RM 7.4(4): "... a deferred constant declaration and the declaration of the corresponding private type must both be declarative items of the visible part of the same package." It is interesting that this limitation is not mentioned anywhere in the subsection devoted to Deferred Constants, but only in the introduction to the section on private types and deferred constants. S. Tucker Taft Intermetrics, Inc. Cambridge, MA 02138
arra@inmet.UUCP (Arra Avakian) (09/14/90)
In article <920029@hpclapd.HP.COM> defaria@hpclapd.HP.COM (Andy DeFaria) writes: >I have been trying to use defered constants in Ada and I have been have >some problems. Everything seems to be OK if the type of the defered >constant is local but if the type is imported then the compiler issues the >error message that follows: (Example deleted to save space) From LRM 7.4(4): "...; a deferred constant declaration and the declaration of the corresponding private type must both be declarative items of the visible part of the same package."