从程序调用函数时,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放在文本文件中会发生什么?您的阵列仅包含索引17中的项目,因此在调用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; 
+0

哦,我的天哪,非常感谢!我不知道为什么我以前没有想过这个。我没有一个教练,自己学习。 – St0ne 2012-08-01 23:53:36