【问题标题】:Can not get example compiled with typedef in template class无法在模板类中使用 typedef 编译示例
【发布时间】:2010-08-13 11:18:04
【问题描述】:

我有这个示例代码: #包括

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’

我不明白,为什么它不起作用?如何让它发挥作用?

【问题讨论】:

  • 你展示的是整个代码吗?您显然缺少typename,但如果这是您从缺少的typename 中得到的错误消息,并且与您发布的代码完全相同,那么至少可以说编译器诊断很奇怪。第一行错误似乎指向代码中不存在的继承关系。
  • 我同意这很奇怪,但我展示了整个代码,并且类型名使消息消失了。

标签: c++ templates typedef


【解决方案1】:

你需要告诉编译器 Ref 是一个类型,使用 typename

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

question 对此进行了进一步讨论。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-24
    相关资源
    最近更新 更多