我在另一个模板中有一个名为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;。我该如何解决这个问题?非常感谢
答案 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,struct
或typedef
inition,您需要添加typename
关键字以告诉编译器您要将其用作类型:
template <typename T>
typename myClass<T>::Node* myClass<T>::Node::getNext() { // ...
// ^^^^^^^^ << Add typename keyword