从程序调用函数时,pascal非法限定符错误
问题描述:
function classes(o:integer): String;
var allclasses : array[1..7] of String;
begin
allclasses[1]:= 'class1';
allclasses[2]:= 'class2';
allclasses[3]:= 'class3';
allclasses[4]:= 'class4';
allclasses[5]:= 'class5';
allclasses[6]:= 'class6';
allclasses[7]:= 'class7';
classes := allclasses[o];
end;
上面你可以看到一个函数,它应该接收一个整数并给出存储在数组中的字符串结果。从程序调用函数时,pascal非法限定符错误
procedure loadthis(chosen : string);
var f: text;
i : integer;
begin
Assign(f, 'files\'+chosen+'.txt');
Reset(f);
ReadLn(f, i);
MyChar.clas := classes[i];
end;
当调用此过程时,它调用“类”函数。请注意Mychar是一个全局变量。
begin
loadthis(FileName);
ReadLn;
Readln
end.
蚂蚁这是主程序,它调用“loadthis”过程。
我不知道什么是错的,但我得到这些错误:
- 量的参数错误指定
- 非法预选赛
这两个错误都来自这条线: MyChar.clas := classes[i];
。我真的不知道什么是错的,也许我不能从程序中调用函数?请帮忙。
答
你试图访问它作为数组的索引,但它需要一个函数调用:
MyChar.clas := classes(i); { note() instead of [] }
你或许应该增加一些范围检查了。如果有人将20
放在文本文件中会发生什么?您的阵列仅包含索引1
到7
中的项目,因此在调用classes(20)
时出现运行时错误,且超出范围值。
(你也许可以使用一个常量数组为
allclasses
,以减轻你的代码为好,但你的老师可能还没有得到那么远呢。)
鉴于对没有教员您的评论,这里的关于更好的方法来处理该功能的建议:
function classes(o:integer): String;
const
allclasses: array[1..7] of string = ('class1',
'class2',
'class3',
'class4',
'class5',
'class6',
'class7');
begin
{
Low() returns the lowest index of the array, and
High() returns the highest. The if statement makes sure
that o is between them. It is the range check I mentioned.
}
if (o >= Low(allclasses)) and (o <= High(allclasses)) then
classes := allclasses[o]
else
classes := '';
end;
哦,我的天哪,非常感谢!我不知道为什么我以前没有想过这个。我没有一个教练,自己学习。 – St0ne 2012-08-01 23:53:36