PL/1编译报错:无隐式限定符的BASED变量需显式限定,求解答
PL/1编译错误解析:第19、22行报错原因与修复
错误根源
第4行定义VARB时使用了BASED但未绑定特定指针(和第3行VARA BASED(PA)绑定PA的写法不同)。这类未绑定固定指针的BASED变量,必须通过指针->变量的显式限定形式来指定内存位置,不能直接单独使用变量名。
第19行VARB = 'NEW-TEST-DATA'和第22行PUT SKIP LIST(VARB)直接裸用了VARB,编译器无法确定该变量关联哪个指针指向的内存区域,因此抛出"BASED variable without an implicit qualifier must be explicitly qualified."错误。
修复代码
把这两行的VARB替换为PB->VARB即可——因为第18行ALLOCATE VARB SET (PB)已经将VARB的内存地址赋值给了PB,PB就是对应VARB的合法指针限定符:
000019 PB->VARB = 'NEW-TEST-DATA'; 000022 PUT SKIP LIST(PB->VARB);
额外说明
对比VARA的用法:第3行VARA BASED(PA)绑定了固定指针PA,所以裸用VARA时,编译器会默认用PA作为隐式限定符(等价于PA->VARA);而VARB没有绑定固定指针,不存在这种隐式规则,因此必须每次都显式指定指针限定符。
内容的提问来源于stack exchange,提问作者Nupur
相关产品推荐
相关产品推荐

