Q&A

  • TQueue 사용시 에러 발생...
var

A:array[0..100] of Byte;

Queue : TQueue;

begin

Queue.Push(StrNew(A)); // <--여기서 에러 발생...

.

.

.

end;



Byte형으로 선언한 배열을 Queue에 넣고 싶은데...

incompatible types 'Array' and 'PChar'이라고

위와 같은 에러가 발생하네요..

어떻게 하면 될까요?

고수님들의 가르침을 바랍니다...

그럼...





3  COMMENTS
  • Profile
    컴맹.. 2001.03.19 20:21
    안녕하세여... 컴맹입니다...



    위에 코드에는 두가지 문제가 있군여...



    Queue := TQueue.Create;// Queue 객체를 생성한다...

    Queue.Push(@A);// 주소값을 넘겨 준다...



    일단 수정된 코드 입니다...



    먼저 첫번째는Queue 객체를 생성을 시키지 않은 문제구여..



    두번째는 StrNew는 Pchar형을 초기화 즉 메모리를 할당하는 함수입니다..



    따라서 사용하실 필요가 없습니다..



    그럼 이만 줄이 겠습니다...





    과객 wrote:

    > var

    > A:array[0..100] of Byte;

    > Queue : TQueue;

    > begin

    > Queue.Push(StrNew(A)); // <--여기서 에러 발생...

    > .

    > .

    > .

    > end;

    >

    > Byte형으로 선언한 배열을 Queue에 넣고 싶은데...

    > incompatible types 'Array' and 'PChar'이라고

    > 위와 같은 에러가 발생하네요..

    > 어떻게 하면 될까요?

    > 고수님들의 가르침을 바랍니다...

    > 그럼...

    >

    >

  • Profile
    과객 2001.03.19 21:30
    컴맹.. wrote:

    > 안녕하세여... 컴맹입니다...

    >

    > 위에 코드에는 두가지 문제가 있군여...

    >

    > Queue := TQueue.Create;// Queue 객체를 생성한다...

    > Queue.Push(@A);// 주소값을 넘겨 준다...

    >

    > 일단 수정된 코드 입니다...

    >

    > 먼저 첫번째는Queue 객체를 생성을 시키지 않은 문제구여..

    >

    > 두번째는 StrNew는 Pchar형을 초기화 즉 메모리를 할당하는 함수입니다..

    >

    > 따라서 사용하실 필요가 없습니다..

    >

    > 그럼 이만 줄이 겠습니다...

    >

    >

    > 과객 wrote:

    > > var

    > > A:array[0..100] of Byte;

    > > Queue : TQueue;

    > > begin

    > > Queue.Push(StrNew(A)); // <--여기서 에러 발생...

    > > .

    > > .

    > > .

    > > end;

    > >

    > > Byte형으로 선언한 배열을 Queue에 넣고 싶은데...

    > > incompatible types 'Array' and 'PChar'이라고

    > > 위와 같은 에러가 발생하네요..

    > > 어떻게 하면 될까요?

    > > 고수님들의 가르침을 바랍니다...

    > > 그럼...

    > >

    > > 답변에 감사 드립니다...

    그런데 하나더....

    그럼...받을땐 어찌해야하지요?

    Queue.pop을 이용해야 할것 같은데...

    A := Queue.pop;

    이렇게 하면 되나요?



  • Profile
    컴맹.. 2001.03.19 22:45
    안녕하세여...

    전체 소스를 올림니다..

    이런식으로 사용하심이 맞는것 같네여...



    unit Unit1;



    interface



    uses

    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

    StdCtrls,contnrs;





    type

    PData = ^TData;

    TData = Record

    Data : Array[0..100] of Byte;

    end;

    type

    TForm1 = class(TForm)

    Button1: TButton;

    Button2: TButton;

    procedure Button1Click(Sender: TObject);

    procedure FormCreate(Sender: TObject);

    procedure FormClose(Sender: TObject; var Action: TCloseAction);

    procedure Button2Click(Sender: TObject);

    private

    { Private declarations }

    Queue : TQueue;

    public

    { Public declarations }

    end;



    var

    Form1: TForm1;



    implementation



    {$R *.DFM}



    procedure TForm1.Button1Click(Sender: TObject);

    var

    A:PData;



    begin

    A := New(PData);

    A^.Data[0] := 1;

    Queue.Push(A);// 주소값을 넘겨 준다...

    end;



    procedure TForm1.FormCreate(Sender: TObject);

    begin

    Queue := TQueue.Create;// Queue 객체를 생성한다...

    end;



    procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);

    begin

    Queue.Free; // 객체의 할당된 메모리를 해제한다.

    end;



    procedure TForm1.Button2Click(Sender: TObject);

    var

    A : PData;

    begin

    A := PData(Queue.Pop);//값을 가져와서.. type Casting을 해준다.



    Showmessage(IntToStr(A^.Data[0]));

    end;



    end.



    그럼 도움이 되셨기를 ...















    과객 wrote:

    > 컴맹.. wrote:

    > > 안녕하세여... 컴맹입니다...

    > >

    > > 위에 코드에는 두가지 문제가 있군여...

    > >

    > > Queue := TQueue.Create;// Queue 객체를 생성한다...

    > > Queue.Push(@A);// 주소값을 넘겨 준다...

    > >

    > > 일단 수정된 코드 입니다...

    > >

    > > 먼저 첫번째는Queue 객체를 생성을 시키지 않은 문제구여..

    > >

    > > 두번째는 StrNew는 Pchar형을 초기화 즉 메모리를 할당하는 함수입니다..

    > >

    > > 따라서 사용하실 필요가 없습니다..

    > >

    > > 그럼 이만 줄이 겠습니다...

    > >

    > >

    > > 과객 wrote:

    > > > var

    > > > A:array[0..100] of Byte;

    > > > Queue : TQueue;

    > > > begin

    > > > Queue.Push(StrNew(A)); // <--여기서 에러 발생...

    > > > .

    > > > .

    > > > .

    > > > end;

    > > >

    > > > Byte형으로 선언한 배열을 Queue에 넣고 싶은데...

    > > > incompatible types 'Array' and 'PChar'이라고

    > > > 위와 같은 에러가 발생하네요..

    > > > 어떻게 하면 될까요?

    > > > 고수님들의 가르침을 바랍니다...

    > > > 그럼...

    > > >

    > > > 답변에 감사 드립니다...

    > 그런데 하나더....

    > 그럼...받을땐 어찌해야하지요?

    > Queue.pop을 이용해야 할것 같은데...

    > A := Queue.pop;

    > 이렇게 하면 되나요?

    >