2010-08-13 57 views
1

我有这样的例子代码: 的#include不能得到例如用typedef编译模板类

template<class T> 
class Class 
{ 
public: 
    typedef boost::shared_ptr<Class<T> > Ref; 
}; 

template<class T> 
class Class2 
{ 
public: 
    Class<T>::Ref getAReference() {return Class<T>::Ref(new Class<T>);}; 
}; 
int main(){} 

当我尝试编译它,我得到:

test.cpp:14: error: type ‘Class<T>’ is not derived from type ‘Class2<T>’ 
test.cpp:14: error: expected ‘;’ before ‘getAReference’ 

我不明白它,它为什么不起作用?我如何使它工作?

+0

您是否显示了整个代码?你显然缺少'typename',但是如果这是你从缺少'typename'得到的错误信息,那么你发布的代码至少可以说是很奇怪的。第一行错误似乎指向代码中不存在的继承关系。 – 2010-08-13 11:27:51

+0

我同意这很奇怪,但我显示了整个代码和一个typename使消息消失。 – Nathan 2010-08-13 11:40:58

回答

4

你需要告诉编译器Ref使用typename

typename Class<T>::Ref getAReference() {return Class<T>::Ref(new Class<T>);}; 

question讨论进一步是一种类型。

+0

+1 - http://codepad.org/1BXCAoeW – 2010-08-13 11:28:19