Need typename error (template related error)

后端 未结 2 473
野的像风
野的像风 2021-01-29 00:17

I have a class called node inside another class which is templated. Some of the methods of class Node returns Node pointer. This is an excerpt of how I implemented



        
相关标签:
2条回答
  • 2021-01-29 00:32

    How do I fix this problem?

    The compiler's error message s pretty clear about this point:
    To use nested classes, structs or typedefinitions from a template class you need to add the typename keyword to tell the compiler you want to use it as a type:

       template <typename T>
       typename myClass<T>::Node* myClass<T>::Node::getNext()  { // ...
    // ^^^^^^^^ << Add typename keyword
    
    0 讨论(0)
  • 2021-01-29 00:44

    To clarify, the compiler has no idea that myClass<T>::Node is now or ever will be a type. Think of it this way:

    template <typename T>
    class A
    {
    public:
        typedef T value_type;
    };
    
    template <typename T>
    class B
    {
    public:
       typename A<T>::value_type x;
    };
    
    template <> A<int> { public: static int value_type=10;}
    

    You have to make the promise to the compiler that the type is a typename. It defaults to assuming that it is a value.

    0 讨论(0)
提交回复
热议问题