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
[75538] Re:Re:typename 10.3 버전 컴파일 오류
수야!╋ [sooya23] 2283 읽음    2019-08-22 17:19
이정도의 답변이 바빠서 남기신 글이라 하기엔 너무나 친절하셔서 ...

답변을 위해 소비하셨을 시간을 생각하니 더할 나위 없이 감사합니다.

사실 말씀해주신 요점을 이해하기엔 제가 부족합니다.

답을 주시지 않았다면 지금도 답과 비슷한 typedef 로 씨름하고 있겠네요.

two phase lookup에 대한 동작차이에 대한 주의사항 역시 유념하고 있도록 하겠습니다.

다시 한번 감사드립니다.

밤낮 기온차에 감기 조심하시고 건강하십시요.( 포럼을 위해서 )


빌더(TWx) 님이 쓰신 글 :
: 수야!╋ 님이 쓰신 글 :
: : 안녕하세요. 수야입니다. ( 백만년 만이네요. 꾸벅 )
: :
: : 오랜시간 사용해오던 라이브러리가 10.3 rio 에서 컴파일 오류가 발생합니다.(최종 작업은 XE5입니다)
: :
: : 옵션에서 C++ Compilers(WIN32)의 Use 'classic' borland compiler 를 true로 해주면 컴파일이 되긴 하는데...
: :
: : 다른 라이브러리에서 문제가 발생하여 Use 'classic' borland compiler 를 false 상태로 컴파일이 되게 하고싶습니다.
: :
: : 발생하는 오류는 첨부파일의 275라인 expected a qualified name after 'typename'
: : 등등등 입니다.
: :
: : 오랫만에 등장해 질문만 불쑥 올려 송구스럽지만.. 잘 부탁드립니다.
:
:
:
: 답변:
:
:
: 바빠서 요점만 남깁니다.
:
:
: 컴파일러가 template 코드를 파싱할 때...
: 어떤 요소가 템플릿 인수 T에 dependent 관계를 가질 경우 typename 키워드로 명시해 줘야하고
: 템플릿 파싱구조 상... two phase name lookup 으로 파서가 구현되어야 합니다.
:
: two phase name lookup으로 컴파일러 파서가 구현되어 있어야
: C++ compliant 요구조건을 충족하는 컴파일러가 되는 거고
:
: 그렇지 않은 경우 파서를 작위적으로 엉터리로 만들어 놓은 컴파일가 되는 거죠.
:
: gcc, clang, vc++ 와 같은 컴파일러는 two phase name lookup 으로 파서가 구현되어 있는
: C++ compliant 요구조건을 만족하는 컴파일러 입니다.
:
:
: 본론으로 돌아와서...
:
:
:
: protected:
: 	typename ListObject				m_ListObject;
: 	typename ListObject::iterator	m_ListPosition;
: 	typename ListObject::reverse_iterator	m_ListReveres_Position;
: 

:
: 로 되어 있는 부분을...
:
:
:
:
: protected:
:    typename _T::ListObject				m_ListObject;
:    typename ListObject::iterator	m_ListPosition;
:    typename ListObject::reverse_iterator	m_ListReveres_Position;
: 
:    typedef typename ListObject::iterator IT_I;
:    typedef typename ListObject::const_iterator IT_CI;
:    typedef typename ListObject::reverse_iterator IT_RI;
: 
: 

:
: 위와 같이 바꾼 후...
:
:
:
:
: public:
: 	inline void	RemoveAll()
: 	{
: 		ListObject::const_iterator iter_end( m_ListObject.end() );
: 
: 

:
: 위의 코드와 같이... 되어 있는 부분을...
: two phase lookup 요구조건을 만족하도록
:
:
: 	inline void	RemoveAll()
: 	{
: 		IT_CI iter_end( m_ListObject.end() );
: 
: 

:
: 위와 같은 식으로 대체해 주면 됨.
:
: using 키워드를 이용하면 코드를 간결하게 작성할 수 있는데, legacy 컴파일러에선 지원되지 않음.
:
:
: two phase lookup 조건이냐 아니냐에 따라서 기인되는 코드의 실제동작의 차이는
: 전체코드 없이는 판단할 수 없고, 본인이 알아서 처리하세요.
:
:
:
:

+ -

관련 글 리스트
75533 typename 10.3 버전 컴파일 오류 수야!╋ 2224 2019/08/22
75535     Re:typename 10.3 버전 컴파일 오류 빌더(TWx) 2284 2019/08/22
75538         Re:Re:typename 10.3 버전 컴파일 오류 수야!╋ 2283 2019/08/22
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.