我在RPG ILE Free中使用外部描述的数据结构时遇到了一些问题.
最简单的问题似乎只是宣告结构.
DCL-DS PALWGHT extname(SCN102DS);
PW DIM(20) OVERLAY(PALWGHT:1);
END-DS;
Run Code Online (Sandbox Code Playgroud)
当我编译时,它说外部文件不存在......但它确实存在并且它在我的库列表中.
A R PALWGHT
A P01WGHT 11S 3
A P02WGHT 11S 3
A P03WGHT 11S 3
A P04WGHT 11S 3
A P05WGHT 11S 3
A P06WGHT 11S 3
A P07WGHT 11S 3
A P08WGHT 11S 3
A P09WGHT 11S 3
A P10WGHT 11S 3
A P11WGHT 11S 3
A P12WGHT 11S 3
A P13WGHT 11S 3
A P14WGHT 11S 3
A P15WGHT 11S 3
A P16WGHT 11S 3
A P17WGHT 11S 3
A P18WGHT 11S 3
A P19WGHT 11S 3
A P20WGHT 11S 3
Run Code Online (Sandbox Code Playgroud)
这在将其更改为自由格式之前有效.....
DPALWGHT E DS EXTNAME(SCN102DS)
DPW 11s 3 DIM(20) OVERLAY(PALWGHT:1)
Run Code Online (Sandbox Code Playgroud)
我迷路了.这可能是非常愚蠢的......
几个问题.首先,在自由格式中,文件名EXTNAME(filename)必须是命名常量或字符文字.这与固定形式变体不同,后者可以是文件名或字符文字.如果您阅读了所有错误消息RNF0202 - THE PARAMETER FOR EXTNAME OR EXTFLD MUST BE A DEFINED NAMED CONSTANT OR LITERAL.如果使用文件名,则必须用自由格式的引号括起来.
DCL-DS PALWGHT extname('SCN102DS');
Run Code Online (Sandbox Code Playgroud)
PW仍然是未定义的,因为它没有类型声明.并且,在自由形式中,OVERLAY()不能指向数据结构.相反,你使用POS().所以整个事情应该是这样的:
DCL-DS PALWGHT extname('SCN102DS');
PW LIKE(P01WGHT) DIM(20) POS(1);
END-DS;
Run Code Online (Sandbox Code Playgroud)