템플릿 부모 클래스에 정의 된 구조체 초기화

매튜 러셀

상속 된 클래스에서 사용하고 싶은 부모 클래스의 보호 섹션 내에 구조체를 정의했습니다.

부모 / 자식 클래스가 템플릿 클래스가 아닌 경우 예상대로 작동합니다. 그러나 아래에서 그대로 컴파일하지 않습니다.

특히 컴파일러 (clang 8.0.1)는 다음을보고합니다.

inheritance_example.cpp:33:26: error: unknown type name 'Node'
        this->head = new Node(toAdd);

내가 읽은 내용에서 템플릿 유형 사양이에 할당되지 않았 Node으므로 상속 된 클래스에서 찾을 수 없다고 생각하지만 그 정맥에서 찾은 수정을 시도합니다 (예 : using Parent<T>::Node, 또는 Node 생성자에 대한 호출에 유형 지정자를 추가), 나를 위해 작동하지 않았습니다.

이 문제를 해결하는 방법에 대한 아이디어가 있습니까?

#include<iostream>

template <class T>
class Parent 
{
protected:
   struct Node
   {
      Node(int value) 
      {
         this->data = value;
         this->next = nullptr;
      };

      ~Node() {};
      Node* next;
      int data;
   };

   Node* head;

public:
   Parent() {};
   ~Parent() {};
};

template <class T>
class Child : Parent<T>
{
public:

   Child() 
   {
      this->head = nullptr;
   };

   ~Child()
   {
      delete this->head;
      this->head = nullptr;
   };

   void dummyAdd(T toAdd) {
      this->head = new Node(toAdd);
   };

   void dummyPrint() 
   {
      std::cout << this->head->data << std::endl;
   };
};

int main() 
{
   Child<int> t;
   t.dummyAdd(5);
   t.dummyPrint();
   return 0;
}
제조

답변에 댓글을 담기 위해!

Node종속 된 이름이므로 거기에 키워드typename 를 사용해야 합니다 . dummyAdd기능 에서 의미하는 것은

void dummyAdd(T toAdd) 
{
   this->head = new typename Parent<T>::Node(toAdd);
   //               ^^^^^^^^^^^^^^^^^^^^ 
};

그러나 그것은 약간 장황하고 더 많은 타이핑입니다. 따라서 제공하는 유형 별칭을 위해 Node(가)에서 Child좋은 아이디어가 될 것입니다.

template <class T>
class Child : Parent<T> 
{
   using Node = typename Parent<T>::Node;  // template type alias

public:
   void dummyAdd(T toAdd) 
   {
      this->head = new Node(toAdd);       // now you can this
   };

   // other code...
};

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

템플릿 화 된 클래스 내부의 템플릿 화 된 구조체 전문화

분류에서Dev

클래스 템플릿 내부에 정의 된 친구 함수. 함수 템플릿 재정의 오류

분류에서Dev

정의 된 클래스를 템플릿 매개 변수 내부의 구조체로 선언

분류에서Dev

템플릿 클래스의 인스턴스화 된 객체에 대한 C ++ 템플릿 메타 함수

분류에서Dev

템플릿 클래스의 템플릿 클래스 구조체

분류에서Dev

전문화 된 템플릿 클래스의 정의 외부에서 템플릿 멤버 함수를 어떻게 정의합니까?

분류에서Dev

라인 외부를 정의 할 때 이미 템플릿 화 된 클래스의 메서드에 추가 템플릿 인수 추가

분류에서Dev

템플릿 기반의 조건부 클래스 멤버

분류에서Dev

템플릿 유형에서 정적 멤버 초기화를 적용하는 방법은 무엇입니까? 또는 템플릿 유형에서 파생 된 모든 클래스의 수를 얻는 방법은 무엇입니까?

분류에서Dev

Java의 부모 빌더 클래스에서 객체 초기화

분류에서Dev

C ++ 템플릿 : 기본 클래스에서 파생 된 템플릿 클래스의 멤버 함수 호출

분류에서Dev

클래스 템플릿에 정의 된 매개 변수가없는 친구 템플릿 함수 호출

분류에서Dev

assert 문 내부의 템플릿 구조체 인스턴스화에 대한 구문 오류

분류에서Dev

템플릿 매개 변수 AA가 템플릿 화 된 클래스 A <T> 자체 인 경우이 템플릿 화 된 클래스의 템플릿 매개 변수 (T)를 가져올 수 있습니까?

분류에서Dev

템플릿 클래스 내에서 정적 멤버의 지연 초기화

분류에서Dev

사용자 선택을 기반으로 클래스 템플릿에서 개체 정의 및 로컬로 정의 된 개체의 범위 확인-새 질문

분류에서Dev

클래스 정의 외부의 부분 템플릿 전문화 정의

분류에서Dev

바인딩 된 템플릿 친구 함수를 템플릿 클래스에 어떻게 전문화합니까?

분류에서Dev

클래스 내부에 정의 된 "공용"구조체에 액세스

분류에서Dev

상속 된 중첩 템플릿 클래스의 전문화

분류에서Dev

클래스 템플릿 정적 데이터 멤버 정의 / 선언 / 초기화

분류에서Dev

템플릿의 변수를 사용하여 클래스의 C ++ 초기화 개체

분류에서Dev

템플릿 클래스 내에서 고정 길이 배열 초기화

분류에서Dev

템플릿 클래스 외부에서 비 템플릿 함수 정의

분류에서Dev

VC ++ 2013의 중첩 된 가변 템플릿 구조체에 대한 별칭

분류에서Dev

오류 : '>'앞에 예상되는 primary-expression : 템플릿 화 된 클래스의 템플릿 메서드를 사용하려는 템플릿 함수

분류에서Dev

오류 : '>'앞에 예상되는 primary-expression : 템플릿 화 된 클래스의 템플릿 메서드를 사용하려는 템플릿 함수

분류에서Dev

멤버 함수의 C ++ 조건부 템플릿 클래스 정의

분류에서Dev

템플릿 클래스 부분 전문화 구문

Related 관련 기사

  1. 1

    템플릿 화 된 클래스 내부의 템플릿 화 된 구조체 전문화

  2. 2

    클래스 템플릿 내부에 정의 된 친구 함수. 함수 템플릿 재정의 오류

  3. 3

    정의 된 클래스를 템플릿 매개 변수 내부의 구조체로 선언

  4. 4

    템플릿 클래스의 인스턴스화 된 객체에 대한 C ++ 템플릿 메타 함수

  5. 5

    템플릿 클래스의 템플릿 클래스 구조체

  6. 6

    전문화 된 템플릿 클래스의 정의 외부에서 템플릿 멤버 함수를 어떻게 정의합니까?

  7. 7

    라인 외부를 정의 할 때 이미 템플릿 화 된 클래스의 메서드에 추가 템플릿 인수 추가

  8. 8

    템플릿 기반의 조건부 클래스 멤버

  9. 9

    템플릿 유형에서 정적 멤버 초기화를 적용하는 방법은 무엇입니까? 또는 템플릿 유형에서 파생 된 모든 클래스의 수를 얻는 방법은 무엇입니까?

  10. 10

    Java의 부모 빌더 클래스에서 객체 초기화

  11. 11

    C ++ 템플릿 : 기본 클래스에서 파생 된 템플릿 클래스의 멤버 함수 호출

  12. 12

    클래스 템플릿에 정의 된 매개 변수가없는 친구 템플릿 함수 호출

  13. 13

    assert 문 내부의 템플릿 구조체 인스턴스화에 대한 구문 오류

  14. 14

    템플릿 매개 변수 AA가 템플릿 화 된 클래스 A <T> 자체 인 경우이 템플릿 화 된 클래스의 템플릿 매개 변수 (T)를 가져올 수 있습니까?

  15. 15

    템플릿 클래스 내에서 정적 멤버의 지연 초기화

  16. 16

    사용자 선택을 기반으로 클래스 템플릿에서 개체 정의 및 로컬로 정의 된 개체의 범위 확인-새 질문

  17. 17

    클래스 정의 외부의 부분 템플릿 전문화 정의

  18. 18

    바인딩 된 템플릿 친구 함수를 템플릿 클래스에 어떻게 전문화합니까?

  19. 19

    클래스 내부에 정의 된 "공용"구조체에 액세스

  20. 20

    상속 된 중첩 템플릿 클래스의 전문화

  21. 21

    클래스 템플릿 정적 데이터 멤버 정의 / 선언 / 초기화

  22. 22

    템플릿의 변수를 사용하여 클래스의 C ++ 초기화 개체

  23. 23

    템플릿 클래스 내에서 고정 길이 배열 초기화

  24. 24

    템플릿 클래스 외부에서 비 템플릿 함수 정의

  25. 25

    VC ++ 2013의 중첩 된 가변 템플릿 구조체에 대한 별칭

  26. 26

    오류 : '>'앞에 예상되는 primary-expression : 템플릿 화 된 클래스의 템플릿 메서드를 사용하려는 템플릿 함수

  27. 27

    오류 : '>'앞에 예상되는 primary-expression : 템플릿 화 된 클래스의 템플릿 메서드를 사용하려는 템플릿 함수

  28. 28

    멤버 함수의 C ++ 조건부 템플릿 클래스 정의

  29. 29

    템플릿 클래스 부분 전문화 구문

뜨겁다태그

보관