오류 : 'int_type'이 유형의 이름을 지정하지 않습니다-typedef 및 사용을 상속하는 방법

kyb

나는 다음 streambuf에서 파생되는 지층을 쓰고 있습니다 std::basic_streambuf.

/// Basic Socket Buffer
template<
        typename CharT_,
        typename Traits_ = std::char_traits< CharT_ > >
class BasicSocketBuffer //BasicSocketStreamBuffer
        : public std::basic_streambuf< CharT_, Traits_ >
{
...
    virtual int_type
    overflow(int_type __c = traits_type::eof());
...

오류 :

error: 'int_type' does not name a type
    virtual int_type
             ^~~~~~~~
note: (perhaps 'typename std::basic_streambuf<_CharT, _Traits>::int_type' was intended)

ㅋ. 컴파일러는 내가 원하는 것을 알고 있지만하지 않습니다. 왜?

다음은 부모 std 클래스의 첫 번째 줄입니다.

template<typename _CharT, typename _Traits>
class basic_streambuf
{
public:
    //@{
    /**
     *  These are standard types.  They permit a standardized way of
     *  referring to names of (or names dependent on) the template
     *  parameters, which are specific to the implementation.
    */
    typedef _CharT char_type;
    typedef _Traits traits_type;
    typedef typename traits_type::int_type int_type;
    typedef typename traits_type::pos_type pos_type;
    typedef typename traits_type::off_type off_type;
...

해결 방법

파생 클래스에서 거의 모든 사용 된 유형을 다시 한 번 다시 선언합니다.

class Derived : class Parent {
  using Parent::int_type;  // for non-templated
  using typename Parent::char_type;
...

더 나은 방법을 알고 있습니까? C ++ 11,14는 환영합니다.

kyb

클래스 템플릿에서 유형을 상속하는 유일한 방법은 유형을 다시 정의하는 것입니다. 제 경우 가장 간단한 방법은 Parent 클래스에서 복사하여 붙여 넣는 것입니다.

/// Basic Socket Buffer
template<
        typename CharT_,
        typename Traits_ = std::char_traits< CharT_ > >
class BasicSocketBuffer //BasicSocketStreamBuffer
        : public std::basic_streambuf< CharT_, Traits_ >
{
...
public:
    //@{
    /**
     *  These are standard types.  They permit a standardized way of
     *  referring to names of (or names dependent on) the template
     *  parameters, which are specific to the implementation.
    */
    typedef _CharT char_type;
    typedef _Traits traits_type;
    typedef typename traits_type::int_type int_type;
    typedef typename traits_type::pos_type pos_type;
    typedef typename traits_type::off_type off_type;
...

이 방법은 C++98호환됩니다.

다른 현대적이고 좋은 방법은 내부 유형 을 선언 SuperType하고 다시 사용 using하는 것입니다.

/// Basic Socket Buffer
template<
        typename CharT_,
        typename Traits_ = std::char_traits< CharT_ > >
class BasicSocketBuffer //BasicSocketStreamBuffer
        : public std::basic_streambuf< CharT_, Traits_ >
{
...
public:
    using SuperBuffer = std::basic_streambuf< CharT_, Traits_ >;
    //@{
    /**
     *  These are standard types.  They permit a standardized way of
     *  referring to names of (or names dependent on) the template
     *  parameters, which are specific to the implementation.
    */
    using typename SuperBuffer::char_type;
    using typename SuperBuffer::traits_type;
    using typename SuperBuffer::int_type;
    using typename SuperBuffer::pos_type;
    using typename SuperBuffer::off_type;
...

의 내부 형식은 SuperBuffer( SuperBuffer::InnerX)하지 않고 직접 사용할 수 =있지만, SuperBuffer::InnerX::InnerY재사용해야 =하기 때문에 InnerX의 기본 형식이 아닙니다 BasicSocketBuffer.
typename클래스 템플릿에 필요합니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

오류 : [클래스 내부의 typedef]가 유형의 이름을 지정하지 않습니다.

분류에서Dev

이 오류를 해결하는 방법 : 공용은 유형의 이름을 지정하지 않습니까?

분류에서Dev

yyy의 오류 xxx는 유형의 이름을 지정하지 않습니다.

분류에서Dev

'drawBox'는 유형 오류의 이름을 지정하지 않습니다.

분류에서Dev

오류 : 'pthread'는 유형의 이름을 지정하지 않습니다.

분류에서Dev

다단계 상속 오류 "cout이 유형의 이름을 지정하지 않습니다."

분류에서Dev

오류 : classname은 유형의 이름을 지정하지 않습니다.

분류에서Dev

오류 : 유형의 이름을 지정하지 않습니다 (C ++).

분류에서Dev

오류 : 'ClassName'은 유형의 이름을 지정하지 않습니다.

분류에서Dev

오류, "cout은 유형의 이름을 지정하지 않습니다."

분류에서Dev

cout / cin은 유형 오류의 이름을 지정하지 않습니다.

분류에서Dev

NameError : 이름 'webdriver'는 Selenium 및 Python을 사용하는 오류가 정의되지 않았습니다.

분류에서Dev

유형 오류의 이름을 지정하지 않습니다 (글로벌 클래스 사용).

분류에서Dev

"유형의 이름을 지정하지 않음"오류 C ++

분류에서Dev

'입력'은 유형 오류의 이름을 지정하지 않습니다. 이유를 알 수 없습니까?

분류에서Dev

오류 : 클래스 이름이 C ++에서 유형의 이름을 지정하지 않습니다.

분류에서Dev

오류 : 필드의 'int []'유형이 지원되지 않습니다. Realm에 정수 목록을 추가하는 방법은 무엇입니까?

분류에서Dev

구조 및 기능-유형의 이름을 지정하지 않습니다.

분류에서Dev

Arduino의 typedef struct : 변수가 유형의 이름을 지정하지 않습니다.

분류에서Dev

"포인터 이름"은 유형 오류의 이름을 지정하지 않습니다.

분류에서Dev

컴파일러 오류 : 오류 : 'ListNode'가 유형의 이름을 지정하지 않습니다.

분류에서Dev

정말 짜증나는 유형 오류의 이름을 지정하지 않습니다.

분류에서Dev

오류 : 네임 스페이스 'std'의 'thread'가 유형의 이름을 지정하지 않습니다.

분류에서Dev

클래스는 C ++ 코드에서 유형 오류의 이름을 지정하지 않습니다.

분류에서Dev

템플릿을 사용한 상속-변수가 유형의 이름을 지정하지 않습니다.

분류에서Dev

오류 C ++ : 'const_iterator'가 유형의 이름을 지정하지 않습니다.

분류에서Dev

우분투에서 'GLEWContext가 유형의 이름을 지정하지 않습니다'오류

분류에서Dev

템플릿 <class T>, "오류 : .... 유형의 이름을 지정하지 않습니다."

분류에서Dev

오류 : 유형 이름을 지정하지 않음 (자동 사용)

Related 관련 기사

  1. 1

    오류 : [클래스 내부의 typedef]가 유형의 이름을 지정하지 않습니다.

  2. 2

    이 오류를 해결하는 방법 : 공용은 유형의 이름을 지정하지 않습니까?

  3. 3

    yyy의 오류 xxx는 유형의 이름을 지정하지 않습니다.

  4. 4

    'drawBox'는 유형 오류의 이름을 지정하지 않습니다.

  5. 5

    오류 : 'pthread'는 유형의 이름을 지정하지 않습니다.

  6. 6

    다단계 상속 오류 "cout이 유형의 이름을 지정하지 않습니다."

  7. 7

    오류 : classname은 유형의 이름을 지정하지 않습니다.

  8. 8

    오류 : 유형의 이름을 지정하지 않습니다 (C ++).

  9. 9

    오류 : 'ClassName'은 유형의 이름을 지정하지 않습니다.

  10. 10

    오류, "cout은 유형의 이름을 지정하지 않습니다."

  11. 11

    cout / cin은 유형 오류의 이름을 지정하지 않습니다.

  12. 12

    NameError : 이름 'webdriver'는 Selenium 및 Python을 사용하는 오류가 정의되지 않았습니다.

  13. 13

    유형 오류의 이름을 지정하지 않습니다 (글로벌 클래스 사용).

  14. 14

    "유형의 이름을 지정하지 않음"오류 C ++

  15. 15

    '입력'은 유형 오류의 이름을 지정하지 않습니다. 이유를 알 수 없습니까?

  16. 16

    오류 : 클래스 이름이 C ++에서 유형의 이름을 지정하지 않습니다.

  17. 17

    오류 : 필드의 'int []'유형이 지원되지 않습니다. Realm에 정수 목록을 추가하는 방법은 무엇입니까?

  18. 18

    구조 및 기능-유형의 이름을 지정하지 않습니다.

  19. 19

    Arduino의 typedef struct : 변수가 유형의 이름을 지정하지 않습니다.

  20. 20

    "포인터 이름"은 유형 오류의 이름을 지정하지 않습니다.

  21. 21

    컴파일러 오류 : 오류 : 'ListNode'가 유형의 이름을 지정하지 않습니다.

  22. 22

    정말 짜증나는 유형 오류의 이름을 지정하지 않습니다.

  23. 23

    오류 : 네임 스페이스 'std'의 'thread'가 유형의 이름을 지정하지 않습니다.

  24. 24

    클래스는 C ++ 코드에서 유형 오류의 이름을 지정하지 않습니다.

  25. 25

    템플릿을 사용한 상속-변수가 유형의 이름을 지정하지 않습니다.

  26. 26

    오류 C ++ : 'const_iterator'가 유형의 이름을 지정하지 않습니다.

  27. 27

    우분투에서 'GLEWContext가 유형의 이름을 지정하지 않습니다'오류

  28. 28

    템플릿 <class T>, "오류 : .... 유형의 이름을 지정하지 않습니다."

  29. 29

    오류 : 유형 이름을 지정하지 않음 (자동 사용)

뜨겁다태그

보관