Turbo pascal、Free pascal和delphi7都没有实现,以用就说function非法。

解决方案 »

  1.   

    不知你说什么?是你的function没写好吧?
      

  2.   

    delphi 7中
    这么使用
    function xxx(param1:Type1;param2:type2...):xxx; pascal;
    这样约束即可.Delphi默认函数是register
      

  3.   


    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs;type
      TForm1 = class(TForm)
      private
        { Private declarations }
        function xyz(x:integer):boolean;//定义一个类的"私有"函数、整型参数、返回布尔型值
      public
        { Public declarations }
        function abc(x:integer):boolean;//定义一个类的"公开"函数、整型参数、返回布尔型值
      end;var
      Form1: TForm1;
      function cdef(y:string):integer;//定义一个单元的"公开"函数、字符串参数、返回整型值implementation//函数 abc、cdef 可被外部单元引用,函数 xyz、hijk不能被外部单元引用。
    //单元或类的过程,除无返回外,定义和编写过程体,与本例函数方法相同。
    //单元或类的变量定义,摆放位置与本例函数定义的摆放位置同义。{$R *.dfm}function hijk(z:boolean):string;//省略定义的函数体(此为单元内私有函数),必须放在引用该函数的语句之前
    begin
      Result := 'False';
      if z then Result := 'True';
    end;function TForm1.xyz(x: integer): boolean;//类的函数体,需在函数名前有类名作前导
    begin
      Result := false;
      //......
    end;function TForm1.abc(x: integer): boolean;//类的函数体,需在函数名前有类名作前导
    begin
      Result := false;
      //......
    end;function cdef(y:string):integer;//单元的函数,函数名前不需类名作前导
    begin
      Result := 0;
      showmessage(hijk(true));//此处引用了一个省略定义的函数(该类函数或过程,须摆放在此之前!)
      //......
    end;end.
      

  4.   

    还有种形式的函数使用:procedure TForm1.Button1Click(Sender: TObject);
    var s:string;
      procedure aaaa(var tmp:string);//过程或函数内的过程,无须定义
      begin
        tmp:='您好!';
      end;
      function bbbb(tmp:string):boolean;//过程或函数内的函数,无须定义
      begin
        Result := tmp<>'';
      end;
    begin
      showmessage(s);
      if bbbb(s) then showmessage('"s"变量值不空')
      else showmessage('"s"变量值空');
      aaaa(s);
      showmessage(s);
      if bbbb(s) then showmessage('"s"变量值不空')
      else showmessage('"s"变量值空');
    end;
      

  5.   

    Delphi限制函数/过程的参数列表中不能定义类型,非基本类型的参数必须先在外部定义。
    对于楼主的需求,只要先定义函数指针参数(Delphi中称之为Procedural Types),然后将参数声明为此类型即可。
      

  6.   

    program exp1;{$APPTYPE CONSOLE}uses
      SysUtils;
    function f1(t:real):real;
    begin
      f1:=t;
    end;function f2(t:real):real;
    begin
      f2:=t*2.0;
    end;function f3(t:real):real;
    begin
      f3:=t*3.0;
    end;function multiFun(function f(t:real):real;r:real):real;{这个就是典型的带函数参数的函数}
    begin
      mutilFun:=f(r);
    end;begin
      writeln('multiFun(f1,2)=',multiFun(f1,2.0));
      writeln('multiFun(f2,2)=',multiFun(f2,2.0));
      writeln('multiFun(f3,2)=',multiFun(f3,2.0));
      readln;
    end.
      

  7.   

    谢谢这位仁兄的耐心,不过最基本的函数定义之类的我还是会的。
    我说的函数参数和过程参数指的不是某个函数或过程的参数,而是用函数名或过程名作为某个函数或过程的参数,类似于C语言的函数指针。我用的教材很老93年的,不知道那种编译器实现了这种功能。
    function mutiFun(function f(n:real):real;r:real):real;
    上面这个就是带函数参数的函数。function f(n:real):real;就是一类函数,只要类型相同就可以作为实参。
      

  8.   

    不是都告诉你了吗,Delphi限制函数/过程的参数列表中不能定义类型,要在外部定义。type
      TFX = function(t:real):real;然后:
    function multiFun(fx: TFX; r:real):real;
    就可以了。
      

  9.   

    那这个不等于C语言了吗?我主要是想知道有没有编译器实现了这个功能,delphi嘛没有太多时间学了。学pascal主要是想研究下“熊猫烧香”(@@#%#……)
      

  10.   

    c和pascal几乎是一一对应的
    函数指针类型,要不要预先定义,差不多
      

  11.   

    他是想在函数的参数声明部分直接定义用户类型,在Pascal中是不可以的。
      

  12.   

    gnu pascal 是按照标准设计的,没记错的话 free pascal 有个兼容标准的模式
      

  13.   

    你不能像C/C++这样,直接在delphi的函数参数中声明函数指针类型:
    void myCallback(void (*pro)(int ),int a)
    {
    xxx
    }
    delphi/pascal中应该这样用:Type
      Tpro=procedure(i:Integer);procedure myCallback(pro:Tpro;a:Integer);
    begin
    xxxx
    end;