Q&A

  • 함수에서 레코드타입의 변수값 변경이 안되요~
<!--CodeS-->
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  Tarr = Record
    nf_sum: longint;
  end;
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
    DL: Tarr;
    procedure insert(L: Tarr);
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.insert(L: Tarr);
begin
  L.nf_sum := 300;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  insert(DL);
  ShowMessage(IntToStr(DL.nf_sum));
end;

end.
<!--CodeE-->

Tarr이란 레코드 타입에 ... nf_sum이라는 longint변수를 설정했습니다.
위에서 버튼을 누르면 insert함수 호출로.. 300값이 할당되고... ShowMessage호출로 300이란 값이 출력되야되는데 0이 계속 출력되네요
왜 안되는거죠??... 가르쳐주세요~
3  COMMENTS
  • Profile
    윤수아 2006.05.26 22:27
    한군데만 고쳐주시면 됩니다.

    procedure insert(L: Tarr); =>  procedure insert(var L: Tarr);

    procedure TForm1.insert(var L: Tarr);
    begin
      L.nf_sum := 300;
    end;


    객체를 넘기실 때는 어차피 Reference가 넘어가기 때문에 var 를 써줄 필요가 없지만
    단순 변수를 넘기실때는 var 로 넘겨야 Reference를 넘기는 것이 됩니다..

    델파이에서 [Value and variable parameters]로 색인하셔서 도움말 보시면 도움이 되실겁니다.

  • Profile
    강훈진 2006.05.27 00:40
    ^^고맙습니다... 잘 되네요~~
  • Profile
    라벤더 2006.05.26 20:23
    insert 에서는 비록 DL이라는 녀석을 받더라도
    그 함수 안에서 만들어낸 L이라는 녀석의 nf_sum에 값을 줍니다.
    그러니 DL에 들어가는 것이 아니라 그 타입만 가져오는 것이되죠..
    insert를 function으로 해서 L을 결과값으로 넘기면 값이 제대로 들어가겠지요? ^^
    즐코하세요~