C++ 无法获取使用模板类中的typedef编译的示例
我有以下示例代码: #包括C++ 无法获取使用模板类中的typedef编译的示例,c++,templates,typedef,C++,Templates,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<
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(){}
模板
班级
{
公众:
typedef boost::shared_ptr Ref;
};
模板
二级
{
公众:
Class::Ref getAReference(){return Class::Ref(新类);};
};
int main(){}
当我试图编译它时,我得到:
test.cpp:14: error: type ‘Class<T>’ is not derived from type ‘Class2<T>’
test.cpp:14: error: expected ‘;’ before ‘getAReference’
test.cpp:14:错误:类型“Class”不是从类型“Class2”派生的
test.cpp:14:错误:应为“;”在“getAReference”之前
我不明白,为什么不起作用?如何使其工作?您需要使用
typename
告诉编译器Ref
是一种类型,即
typename Class<T>::Ref getAReference() {return Class<T>::Ref(new Class<T>);};
typename类::Ref getAReference(){返回类::Ref(新类);};
这将进一步讨论。您需要使用
typename
告诉编译器Ref
是一个类型,即
typename Class<T>::Ref getAReference() {return Class<T>::Ref(new Class<T>);};
typename类::Ref getAReference(){返回类::Ref(新类);};
这将进一步讨论。您是否显示了整个代码?您显然缺少
typename
,但如果这是您从丢失的typename
中得到的错误消息,并且与您发布的代码完全一致,那么编译器诊断至少是奇怪的。第一行错误似乎指向代码中不存在的继承关系。我同意这很奇怪,但我显示的是整个代码,typename使消息消失。您是否显示了整个代码?您显然缺少typename
,但如果这是您从丢失的typename
中得到的错误消息,并且与您发布的代码完全一致,那么编译器诊断至少是奇怪的。第一行错误似乎指向代码中不存在的继承关系。我同意这很奇怪,但我正在显示整个代码,typename使消息消失。