none
[VS2008 C++]namespace 내부의 template class에 선언된 구조체를 상속받은 다른 클래스에서 사용시 compile error 문제 해결 방법 문의 RRS feed

  • 질문

  • <Baseheader.h> namespace TmpNS { template<class TYPE> class BaseClass { ... protected: struct TmpType { ...

    TYPE data; }; }; }; <Derievedheader.h> #include "Baseheader.h" namespace TmpNS { tmeplate<class TYPE> class DrvdClass : public BaseClass<TYPE> { .... protected: TmpType* DFunc(); }; template<class TYPE> DrvdClass<TYPE>::TmpType* DrvdClass<TYPE>::DFunc() { } };

    기본 환경은 각 클래스가 개별 헤더 파일 내에서 동일 namespace 이름 하에 선언되어 있습니다.

    위 코드에서 컴파일시 에러 발생 위치는 "DerivedHeader.h"의  TmpType 구조체 타입을 반환하는 DFunc()이고  "BaseHeader.h"에서 선언된 TmpType 구조체는 namespace 내부에서 정의할 수 없다는 에러 메시지가 뜹니다. 

    DFunc() 이전에 선언되고 사용되는 TmpType 변수들에 대해서는 에러가 발생하지 않고 있으며

    이 코드가 Visual Studio 6에서는 실행되는걸로 알고있습니다

    이 문제에 대한 해결책에 대한 도움 부탁드립니다



    • 편집됨 msseacat 2013년 4월 5일 금요일 오전 7:38
    2013년 4월 4일 목요일 오전 7:49

답변

  • 2003 버전부터 ISO C++ 표준에 맞도록 변경된 몇가지 부분이 있는데, 위 형식이 그 내용에 포함됩니다.

    위와 같은 경우에서는 typename 이라는 키워드를 사용해서 오류를 해결할수 있습니다.

    아래와 같이 에러가 나는 부분에 typename 이라는 키워드를 추가해주세요.

     

    template<class TYPE> typename DrvdClass<TYPE>::TmpType*

         DrvdClass<TYPE>::DFunc()

    {

    }

    • 답변으로 표시됨 msseacat 2013년 4월 10일 수요일 오전 7:27
    2013년 4월 8일 월요일 오전 5:42
    중재자

모든 응답

  • 2003 버전부터 ISO C++ 표준에 맞도록 변경된 몇가지 부분이 있는데, 위 형식이 그 내용에 포함됩니다.

    위와 같은 경우에서는 typename 이라는 키워드를 사용해서 오류를 해결할수 있습니다.

    아래와 같이 에러가 나는 부분에 typename 이라는 키워드를 추가해주세요.

     

    template<class TYPE> typename DrvdClass<TYPE>::TmpType*

         DrvdClass<TYPE>::DFunc()

    {

    }

    • 답변으로 표시됨 msseacat 2013년 4월 10일 수요일 오전 7:27
    2013년 4월 8일 월요일 오전 5:42
    중재자
  • microso.windows.live.msn.exampe.com에 계정정책입니다.

    1.정의:microsoft for 비스타에 대해 이전에는 windows xp a(계속오류)windows offlce2003(계속 오류)offlce2007.2010제품문제가 인증확인치 아님

    제품확인:windows serves2003.2008.2008r2(오류)2010.2012.2013.windows vista.windows7.windows8 확인할수 있으나

    2.응용원격문제:microsoft for NETfranework4 net11.20.30.35.40.45까지 가상화.프린터.클라우드(shs) no http.https액세스문제는 연결할수없습니다.sll5.0.6.0.7.0.7.5까지 외국에 정보에 대해 영문으로 혼합되지 아닙니다.windows serves2012에 설치하기 위하여 all in news make microsoft에 문의하세요 제3자문제가 해결되지 않은 자주 오류하기 때문에 악성코드.해킹.사기등

    방지하기 위해 강력바이러스를 필요합니다.그 2개중에서 하나만 선택하세요

    2013년 7월 12일 금요일 오전 4:29