C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[56180] Template 사용시 union 데이터 형을 사용시 생성자 인식 불가 문제
전재득 [jedclub] 1306 읽음    2009-02-17 13:04
데이터 구조를 명시적으로 입력을 하면 사용하는 측의 인터페이스가 좀더 복잡해 지기 때문에

최대한 피하고 싶었습니다 ㅠㅠ ( 그런 용도로 사용하는게 아니라서 ㅠㅠ )

기존의 RECT 와 호환성을 유지해야 하기 때문에 저로선 피해갈 방법이 많지가 않는것 같네요 ㅠㅠ

아무튼 답변 감사합니다 ^^


김태선 님이 쓰신 글 :
: 아무래도 template 과 unnamed structure 에 대한 문제 같네요.
: 말씀하신 데이타 구조를 명시적으로 기입하면
:     union TA
:     {
:         struct
:         {
:             TN Left;
:             TN Top;
:             TN Right;
:             TN Bottom;
:         };
:         RECT Rect;
:     };
:     TA x;
: 과 같이 하면 컴파일이 잘 되는군요.
: union 자체는 괜잖지만, struct나 union에 대한 구조형 선언 없는 부분에 대한 문제인데
: 지금은 적당히 피해 가는 수 밖에 없지 않나 생각됩니다.
:
:
: 전재득 님이 쓰신 글 :
: : union
: :     {
: :         struct
: :         {
: :             TN Left;
: :             TN Top;
: :             TN Right;
: :             TN Bottom;
: :         };
: : 
: :         RECT Rect;
: :      };
: :
: : 제가 union 이야기를 한건 union & struct 조합으로 다음과 같이 구성을 하면 에러가 난다는 거였고..
: :
: : 저부분을 그냥
: :
: : TN Left;
: : TN Top;
: : TN Right;
: : TN Bottom;
: :
: : 과같이 구성하면 특별한 에러없이 잘 작동은 합니다...
: :
: : (제가 자세한 설명을 못한것 같아 죄송합니다 ㅠㅠ )
: :
: : 회사에서 사용하는지라 빌더6는 확인을 못해봤고 무료 버전인 Turbo C++ (BSD2006) 을 사용 하는데..
: :
: : VS2005, VS2003 에서는 잘 작동하고 GCC에서도 잘 작동하네요.. BCB6에서도 잘 작동 한다고하니;;
: :
: : 이 문제를 어떻게 설명해야하는건지 흑 ㅠㅠ
: :
: : VS & GCC & Turbo C++ 호환 코드를 작성 하고 있는데.. 문제가 있군요 ㅠㅠ
: :
: : 어쨌든 답변 감사합니다!!! BCB6 는 잘되는군요!! 하지만 상업적으로 쓸수가 없으니 OTL...
: :
: :
: :
: :
: : 김태선 님이 쓰신 글 :
: : : 빌더6에서는 잘 됩니다.
: : : VC 2008에서도 잘 됩니다.
: : :
: : : 그런데 빌더 2006 이상에서는 안되네요.
: : : TurboC++ 2006은 물론이고 RAD 2007, 2009 다 마찬가지입니다.
: : : union 과는 관계 없고요,
: : : 템플릿에 다중 생성자가 있는 경우에 대한 두번째 생성자부터가 인식이 안되는 컴파일 문제인데,
: : : 정확하게 이게 컴파일러의 버그인지, 아니면 어떤 표준의 문제 때문에 그렇게 제한을 한 것인지는
: : : 알지 못하겠습니다.
: : : 컴파일러의 표준을 지키는 것은 과거로부터 MS보다는 볼랜드 컴파일러가 더 우수했다는 것을 감안할때
: : : 아무래도 어떤 이유가 있는 것 같은데, 그것 까지는 알지를 못하겠네요.
: : :
: : :
: : :
: : : 전재득 님이 쓰신 글 :
: : : : 저도 빌더만 한 7년이상 써온지라 ㅎㅎ 우수함은 누구보다도 잘압니다 ㅠㅠ
: : : :
: : : : 테스트 코드를 잘못 올렸네요 확인해보니.. 게시판에다 바로 쓰다보니 빼먹은게있는데;;
: : : :
: : : : template< typename TN=int >
: : : : struct MyRect
: : : : {
: : : :     union
: : : :     {
: : : :         struct
: : : :         {
: : : :             TN Left;
: : : :             TN Top;
: : : :             TN Right;
: : : :             TN Bottom;
: : : :         };
: : : :
: : : :         RECT Rect;
: : : :     };
: : : :
: : : :     MyRect( void ){ Left = Top = Right = Bottom = 0; }    // 요기를 빼먹었었네요ㅠㅠ 죄송합니다;
: : : :     MyRect( TN l, TN t, TN r, TN b )
: : : :     {
: : : :         Left = l;
: : : :         Top = t;
: : : :         Right = r;
: : : :         Bottom = b;
: : : :     }
: : : : };
: : : :
: : : : 다음과 같이 작성했고 방금 에러 확인까지 했습니다..
: : : :
: : : : MyRect 의 오버로드 에 관한 컴파일러 인식 문제인듯 싶습니다만...
: : : :
: : : : MyRect<int> testRect( 0, 0, 0, 0 );
: : : :
: : : : 다음과 같이 사용했고...
: : : :
: : : : MyRect( void ){ Left = Top = Right = Bottom = 0; } 가 없다면 잘 인식합니다.
: : : :
: : : : 그리고 제가 사용하는 개발 툴 버전은 10.0.2558.35231 Update 2 버전 입니다.
: : : :
: : : : 혹시 더 높은 버전이 있으시면 좀 알려주시면 좋겠구요 :)
: : : :
: : : : 답변 주셔서 감사합니다 ㅠㅠ
: : : :
: : : :
: : : :
: : : : 김태선 님이 쓰신 글 :
: : : : : 빌더6에서 테스트 해봤는데 잘 되네요.
: : : : : TurboC++ Explorer 버전에서 테스트 해봤는데 잘 되네요.
: : : : : 볼랜드 C++ 컴파일러는 우수하기로 정평이 나  있습니다.
: : : : :
: : : : : 혹시 잘 안된다면
: : : : : TurboC++ Explorer버전 설치후 RAD Studio 2007 이나 2009를 설치 한 것은 아닌가요?
: : : : : 설치 했다면 충돌 문제로 안될 가능성이 있습니다.
: : : : : 제가 테스트한
: : : : : TurboC++ Explorer는 10.0.2288.42451 Update 2  입니다.
: : : : :
: : : : :
: : : : : 전재득 님이 쓰신 글 :
: : : : : : template< typename TN=int >
: : : : : : struct MyRect
: : : : : : {
: : : : : :     union
: : : : : :     {
: : : : : :         struct
: : : : : :         {
: : : : : :             TN Left;
: : : : : :             TN Top;
: : : : : :             TN Right;
: : : : : :             TN Bottom;
: : : : : :         };
: : : : : :
: : : : : :         RECT Rect;
: : : : : :     };
: : : : : :
: : : : : :     MyRect( TN l, TN t, TN r, TN b )
: : : : : :     {
: : : : : :         Left = l;
: : : : : :         Top = t;
: : : : : :         Right = r;
: : : : : :         Bottom = b;
: : : : : :     }
: : : : : : };
: : : : : :
: : : : : : 이런 template struct 를 만들었 습니다.
: : : : : :
: : : : : : MyRect<int> rect( 0, 0, 0, 0);
: : : : : :
: : : : : : 이렇게 사용했는데;; 뭐가 문제인지;; vs 에서는 잘작동하고 c++ 표준에 어긋난거 같진 않은데;;
: : : : : :
: : : : : : 컴파일러가 바보라서 그런걸까여???
: : : : : :
: : : : : : Turbo C++ 무료 버전을 사용 했습니다. 버그 fix 패치는 대부분 했구요...
: : : : : :
: : : : : : 이런 황당한 문제 겪어 보신분 ㅠㅠ 뭐가 문제인건지;;;
: : : : : :
: : : : : : union 을 안쓰고 그냥 밖으로 꺼내면 잘작동하긴 하는데;;;

+ -

관련 글 리스트
56166 Template 사용시 union 데이터 형을 사용시 생성자 인식 불가 문제 전재득 1491 2009/02/16
56214     Re:Template 사용시 union 데이터 형을 사용시 생성자 인식 불가 문제 김상면 1262 2009/02/20
56215         Re:Re:Template 사용시 union 데이터 형을 사용시 생성자 인식 불가 문제 전재득 1240 2009/02/20
56216             Re:Template 사용시 union 데이터 형을 사용시 생성자 인식 불가 문제 %uAE40%uC0C1%uBA74 1513 2009/02/20
56218                 Re:Re:Template 사용시 union 데이터 형을 사용시 생성자 인식 불가 문제 전재득 1353 2009/02/20
56171     Re:Template 사용시 union 데이터 형을 사용시 생성자 인식 불가 문제 김태선 1156 2009/02/17
56172         Re:Re:Template 사용시 union 데이터 형을 사용시 생성자 인식 불가 문제 전재득 1201 2009/02/17
56176             Re:Re:Re:Template 사용시 union 데이터 형을 사용시 생성자 인식 불가 문제 김태선 1105 2009/02/17
56177                 Re:Re:Re:Re:Template 사용시 union 데이터 형을 사용시 생성자 인식 불가 문제 전재득 1216 2009/02/17
56178                     Re:Re:Re:Re:Re:Template 사용시 union 데이터 형을 사용시 생성자 인식 불가 문제 김태선 1106 2009/02/17
56180                         Template 사용시 union 데이터 형을 사용시 생성자 인식 불가 문제 전재득 1306 2009/02/17
56168     Re:Template 사용시 union 데이터 형을 사용시 생성자 인식 불가 문제 김상면 1283 2009/02/17
56169         Re:Re:Template 사용시 union 데이터 형을 사용시 생성자 인식 불가 문제 전재득 1316 2009/02/17
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.