Q&A

  • variant Records 에서 Identifier redeclared 문제?
variant Records 를 사용할려고 하는데 case 문에서

각각의 1,2,3 경우가 있다고 할때,

예를 들어

1에서는 A,B라는 이름의 변수를 선언하고, 2에서는 A,C라는 이름의 변수,

3에서는 B,C라는 이름의 변수를 선언한다고 할때,

컴파일 하면 2에서 A선언되는 라인에서 A가 Identifier redeclared 라고 나오는데

해결할 방법 없는지 궁금합니다.

그냥 생각해보면 1경우때 하고 2 경우때하고는 다른경우(둘중에 한 경우만 사용되는데..)인데 왜 중복되었다는건지 잘 모르겠네요.

2  COMMENTS
  • Profile
    델맹 2001.09.25 18:17
    서경철 wrote:

    > variant Records 를 사용할려고 하는데 case 문에서

    > 각각의 1,2,3 경우가 있다고 할때,

    > 예를 들어

    > 1에서는 A,B라는 이름의 변수를 선언하고, 2에서는 A,C라는 이름의 변수,

    > 3에서는 B,C라는 이름의 변수를 선언한다고 할때,

    > 컴파일 하면 2에서 A선언되는 라인에서 A가 Identifier redeclared 라고 나오는데

    > 해결할 방법 없는지 궁금합니다.

    > 그냥 생각해보면 1경우때 하고 2 경우때하고는 다른경우(둘중에 한 경우만 사용되는데..)인데 왜 중복되었다는건지 잘 모르겠네요.





    이렇게 하셨다는 말씀이죠?



    type

    Trec = record

    case

    1:(A,B : integer);

    2:(A,C : integer);

    3:(B,C : integer);

    end;



    둘중에 한경우만 사용된다고 하셨는데 아닙니다. 사용할땐 모든 필드가

    동시에 사용될수 있습니다. 예를들면...



    var a:Trec;

    ....

    a.B:=123;



    여기서 B 라는 필드가 1번의 B 인지 3번의 B 인지 알수없게 됩니다.

    해결방법은 모든 필드명을 다르게 주거나 레코드를 여러개로 나누는방법이 있습니다.



  • Profile
    서경철 2001.09.25 19:33
    답변 감사드립니다.

    잘 이해가 안되는데, 제가 만든 소스를 첨부합니다.



    TCompoType = (SNGLVOL,TMDPVOL,SNGLJUN,TMDPJUN,...);



    TDtls = record

    .

    .

    .

    case CompoType : TCompoType of

    SNGLVOL:( X : Array[1..9] of pChar;

    PS: Array[1..2] of pChar;

    ....................);

    TMDPVOL:(Geometry:Array[1..9] of pChar;

    DataCon :Array[1..4] of pChar);



    SNGLJUN:(Geometry: Array[1..9] of pChar;

    ..............................);

    .......................



    대충 이런 형태인데요 CompoType 에 따라서 변수선언을 다르게 하는 중인데

    Geometry 같은 변수는 첫번째에는 없고 두세번째에는 없고 나중에 5-6번째

    가서는 Array 갯수도 바뀌고 ( Array[1..4] of pChar) 하거든요.



    근데 CompoType에 의해서 아래 변수들이 결정되는 그런 개념이 아닌가요?

    애구..



    > 이렇게 하셨다는 말씀이죠?

    >

    > type

    > Trec = record

    > case

    > 1:(A,B : integer);

    > 2:(A,C : integer);

    > 3:(B,C : integer);

    > end;

    >

    > 둘중에 한경우만 사용된다고 하셨는데 아닙니다. 사용할땐 모든 필드가

    > 동시에 사용될수 있습니다. 예를들면...

    >

    > var a:Trec;

    > ....

    > a.B:=123;

    >

    > 여기서 B 라는 필드가 1번의 B 인지 3번의 B 인지 알수없게 됩니다.

    > 해결방법은 모든 필드명을 다르게 주거나 레코드를 여러개로 나누는방법이 있습니다.

    >