Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 无法获取使用模板类中的typedef编译的示例_C++_Templates_Typedef - Fatal编程技术网

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使消息消失。