Q&A

  • 코딩 에러를 어떻게 해야할지 난감합니다.
*55>로 표시된 것은 55줄인데 거기서부터 계속 에러가 납니다.

그런데 아래의 에러메시지를 보고도 어디를 해야할지 난감합니다.

델파이 고수님들의 실력으로 저의 어려운 점을 도와주세요.
===================================================================
[Error] IdLogDebug.pas(55): Variable required
[Error] IdLogDebug.pas(56): Constant expression expected
[Error] IdLogDebug.pas(57): Constant expression expected
[Error] IdLogDebug.pas(59): ':=' expected but ':' found
[Error] IdLogDebug.pas(63): '.' expected but ';' found
[Fatal Error] mainf.pas(12): Could not compile used unit 'IdLogDebug.pas'
===================================================================
unit IdLogDebug;

interface

uses
  Classes,
  IdLogBase,
  IdSocketHandle;

type
  TIdLogDebugTarget = (ltFile, ltDebugOutput, ltEvent);
  TLogItemEvent = procedure(ASender: TComponent; var AText: string) of object;

  TIdLogDebug = class(TIdLogBase)
  protected
    FFilename: string;
    FFileStream: TFileStream;
    FOnLogItem: TLogItemEvent;
    FTarget: TIdLogDebugTarget;
    //
    procedure Log(AText: string); override;
    procedure SetActive(const AValue: Boolean); override;
    procedure SetTarget(const AValue: TIdLogDebugTarget);
  public
    destructor Destroy; override;
  published
    property Filename: string read FFilename write FFilename;
    property OnLogItem: TLogItemEvent read FOnLogItem write FOnLogItem;
    property Target: TIdLogDebugTarget read FTarget write SetTarget;
  end;

implementation

uses
  IdGlobal,
  IdResourceStrings,
  SysUtils;

{ TIdLogDebug }

destructor TIdLogDebug.Destroy;
begin
  Active := False;
  inherited;
end;

procedure TIdLogDebug.Log(AText: string);
var
  s: string;
begin
  if assigned(OnLogItem) then begin
    OnLogItem(Self, AText);
  end;
  case Target of ltFile: //begin
*55>      FFileStream.WriteBuffer(PChar(AText), Length(AText));
      s := EOL;
      FFileStream.WriteBuffer(PChar(s), Length(s));
    end;
    ltDebugOutput: begin
      DebugOutput(AText + EOL);
    end;
  end;
end;

procedure TIdLogDebug.SetActive(const AValue: Boolean);
begin
  if AValue then begin
    case Target of
      ltFile:
        if not (csLoading in ComponentState) then begin
          if FileExists(Filename) then begin
            FFileStream := TFileStream.Create(Filename, fmOpenReadWrite);
          end else begin
            FFileStream := TFileStream.Create(Filename, fmCreate);
          end;
          FFileStream.Position := FFileStream.Size;
        end;
    end;
  end else begin
    case Target of
      ltFile: begin
        FreeAndNil(FFileStream);
      end;
    end;
  end;
  inherited;
end;

procedure TIdLogDebug.SetTarget(const AValue: TIdLogDebugTarget);
begin
  if ([csLoading, csDesigning] * ComponentState = []) and Active then
  begin
    raise Exception.Create(RSCannotChangeDebugTargetAtWhileActive);
  end;
  FTarget := AValue;
end;

end.
===================================================================
1  COMMENTS
  • Profile
    박성훈 2002.01.25 00:55
    안녕하세요.
    전 고수는 아니지만 에러내용을 알 것 같군요.

    [Error] IdLogDebug.pas(55): Variable required
    변수가 필요함다. 변수대신 상수를 사용하셨거나 변수 선언을 안하신 경우네요.


    [Error] IdLogDebug.pas(56): Constant expression expected
    상수값이 필요하군요.  델파이에서 제공하는 함수라면 이미 정의 되어 있는 값이 있을 테니까 찾아서 사용하세요.


    [Error] IdLogDebug.pas(59): ':=' expected but ':' found
    값을 대입할 때 = 만 쓰셨군요. :=로 고쳐주세요.

    [Error] IdLogDebug.pas(63): '.' expected but ';' found
    . 를 쓰셔야 할 자리에 ;를 사용하신 경우입니다.


    [Fatal Error] mainf.pas(12): Could not compile used unit 'IdLogDebug.pas'
    위와 같은 이유로 컴파일을 할 수 없다는 군요.

    도움이 되시길