需要typename错误(模板相关错误)

时间:2014-03-31 18:14:12

标签: c++ templates

我在另一个模板中有一个名为node的类,它是模板化的。类Node的一些方法返回Node指针。这是我如何实施

的摘录
 template <typename T>
 class myClass{
 ....
     class Node{
         Node* getNodePointer();
         ...
     }
 }     
 ... 
 template <typename T>
 myClass<T>::Node* myClass<T>::Node::getNext()  
 { return next;  }

当我编译上面的代码时,我收到此错误&#34; myClass.h:138:1:错误:在'myClass :: Node'之前需要'typename',因为'myClass'是一个依赖范围&#34;。我该如何解决这个问题?非常感谢

2 个答案:

答案 0 :(得分:2)

为了澄清,编译器不知道myClass<T>::Node现在或将来都是一个类型。想一想:

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;}

您必须向编译器承诺该类型是typename。它默认假设它是一个值。

答案 1 :(得分:1)

  

如何解决此问题?

编译器的错误信息非常清楚这一点:
要使用模板类中的嵌套class es,structtypedef inition,您需要添加typename关键字以告诉编译器您要将其用作类型:

   template <typename T>
   typename myClass<T>::Node* myClass<T>::Node::getNext()  { // ...
// ^^^^^^^^ << Add typename keyword