unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    Function DelSpace(var str: string): string;
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form1: TForm1;implementation{$R *.dfm}
Function TForm1.DelSpace(var str: string): string;
var
 i : integer;
begin
  i := pos(' ',str);
  while i > 0 do
    begin
      Delete(str,i,1);
      i :=pos(' ',str);
    end;
  result := str;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
  Form1.DelSpace(Edit1.Text);
end;
end.為什么報如下 ERROR:[Error] Unit1.pas(47): Types of actual and formal var parameters must be identical
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'

解决方案 »

  1.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Edit1: TEdit;
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
        Function DelSpace(var str: string): string; //******应该声明在这里**** 
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}
    Function TForm1.DelSpace(var str: string): string;
    var
     i : integer;
    begin
      i := pos(' ',str);
      while i > 0 do
        begin
          Delete(str,i,1);
          i :=pos(' ',str);
        end;
      result := str;
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      Form1.DelSpace(Edit1.Text);
    end;
    end.
      

  2.   

    楼上给出的意见是错误的,不能解决问题。
    真正的原因是:
    DelSpace(var str: string): string
    这个函数要求以引用方式传递一个字符串,而不是值传递(注意VAR修饰),当一个函数要求的参数是引用传递时,不能将诸如Edit1.Text这样的冬冬传递给它,正确的做法应该是:
    procedure TForm1.Button1Click(Sender: TObject);
    var
      s: String;
    begin
      s := Edit1.Text;
      Form1.DelSpace(s);
      Edit1.Text := s;
    end;