| **Navigation:**  [[introduction.htm|Language Reference]] > 2 - Program Source Code Format > Statement Format >====== Field Qualification ====== | [[structure termination.htm|{{btn_prev_n.gif|Previous page}}]][[introduction.htm|{{btn_home_n.gif|Return to chapter overview}}]][[reserved words.htm|{{btn_next_n.gif|Next page}}]] | | || Variables declared as members of complex data structures (GROUP, QUEUE, FILE, RECORD, etc.) may have duplicate labels, as long as the duplicates are not contained within the same structure. To explicitly reference fields with duplicate labels in separate structures, you may use the PRE attribute on the structures just as it is documented (Prefix:FieldLabel) to provide unique names for each field. However, the PRE attribute is not required for this purpose and may be omitted. Any member of any complex structure can be explicitly referenced by prepending the label of the structure containing the field to the field label, separated by a period (StructureName.FieldLabel). You must use this Field Qualification syntax to reference any field in a complex structure that does not have a PRE attribute. You may use a colon (:) instead of a period (StructureName:FieldLabel) to reference member variables of any structure except CLASS and named reference variables (this syntax is only to provide backward compatibility with previous versions of Clarion for Windows). If the variable is within nested complex data structures, you must prepend each successive level's structure label to the variable label to explicitly reference the variable (if the nested structure has a label). If any** **nested structure does not have a label, then that part is omitted from the qualification sequence. This is similar to anonymous unions in C++.** **This means that, in the case of a GROUP structure (without a PRE attribute) in which a nested GROUP structure has a label, the fields in the inner GROUP must be referenced as //OuterGroupLabel.InnerGroupLabel.FieldLabel//. If the inner GROUP structure does not have a label, the individual fields are referenced as //OuterGroupLabel.FieldLabel//. There is one exception to this rule: the label of a RECORD structure within a FILE may be omitted so that you can reference individual fields within the file as //FileLabel.FieldLabel// instead of //FileLabel.RecordLabel.FieldLabel//. This Field Qualification syntax is also used to reference all members of CLASS structures--both data members and methods. To call a member method of a CLASS structure, you specify ClassName.MethodLabel wherever the call to the PROCEDURE is valid. To reference an element of a GROUP structure with the DIM attribute, you must specify the array element number in the Field Qualification syntax at the exact level at which the DIM attribute appears. **Example:** | **MasterFile FILE,DRIVER('TopSpeed')** | | **Record      RECORD** | | **AcctNumber   LONG         !Reference as Masterfile.AcctNumber  ** | | **            END** | | **           END** | | | | **Detail    FILE,DRIVER('TopSpeed')** | | **           RECORD** | | **AcctNumber  LONG          !Reference as Detail.AcctNumber  ** | | **           END** | | **          END** | | | | **Memory    GROUP,PRE(Mem)** | | **Message    STRING(30)     !May reference as Mem:Message or Memory.Message** | | **          END** | | **SaveQueue QUEUE** | | **Field1     LONG           !Reference as SaveQueue.Field1** | | **Field2     STRING         !Reference as SaveQueue.Field2** | | **          END** | | **OuterGroup GROUP** | | **Field1     LONG           !Reference as OuterGroup.Field1** | | **Field2     STRING         !Reference as OuterGroup.Field2** | | **InnerGroup  GROUP** | | **Field1       LONG         !Reference as OuterGroup.InnerGroup.Field1** | | **Field2       STRING       !Reference as OuterGroup.InnerGroup.Field2** | | **            END** | | **           END** | | **OuterGroup GROUP,DIM(5)** | | **Field1     LONG           !Reference as OuterGroup[1].Field1** | | **InnerGroup  GROUP,DIM(5)  !Reference as OuterGroup[1].InnerGroup** | | **Field1       LONG         !Reference as OuterGroup[1].InnerGroup[1].Field1** | | **            END** | | **           END** | **See Also:** [[pre set label prefix .htm|PRE]] [[class object declaration .htm|CLASS]] [[reference variables.htm|Reference Variables]]