这个错误是什么意思:未定义的符号:THREADVARLIST_STRINGS

时间:2011-07-27 19:14:09

标签: arrays pascal undefined-symbol

我刚开始学习Free Pascal,我写了这个相当基本的程序来练习数组。我收到两个错误:

  

Strings.lpr(32,1)错误:未定义的符号:THREADVARLIST_STRINGS

     

Strings.lpr(32,1)错误:未定义的符号:STRINGS_STRPAS $ PCHAR $$ SHORTSTRING

     

Strings.lpr(32,1)致命:编译模块有2个错误,停止

代码如下:

program Strings;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes, SysUtils
  { you can add units after this };

{$R *.res}
var
  Marks : array [1..10] of Integer;
  index : Integer;
begin
  for index:= 0 to 10 do
  begin
    write('Enter mark of student ',index,': ');
    readln(marks[index]);
  end;

  for index := 0 to 10 do
  begin
    write('Student No. ',index,'   Marks: ',marks[index],'   ');
    if marks[index]>65 then writeln('PASS')
    else writeln('FAIL');
  end;

  writeln('Press any key to continue.');
  readln;
end. {line 32}

2 个答案:

答案 0 :(得分:3)

不要为程序字符串命名。有一个带有该名称的预编译单元。

通常意味着您创建主程序但不链接正确的RTL。

可能的原因:

  • 版本冲突,(编译器<> RTL)
  • 通过手动链接(尝试从C访问Pascal?)所犯的错误。
  • 尝试使用不支持某些语言功能的嵌入式RTL。
  • 您的案例)一些命名冲突。但这通常很少见,通常被编译器困住。因此,这种体验可能值得归档为FPC bugtracker中的错误

答案 1 :(得分:0)

更改:

程序字符串;

为:

程序testStrings;

纠正错误。字符串是一个保留字。

此外,您还有“按任意键”,然后是readln。 readln等待回车。类似的东西:

WriteLn('按任意键继续。');   重复   直到KeyPressed;

可能就是你要找的东西。