2010-08-13 53 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