【发布时间】:2015-10-15 14:21:18
【问题描述】:
我的问题是,为什么下面的代码不能编译:
template<typename t> class c1
{
public:
typedef int type_name;
void fn1(type_name x) {}
};
template<typename t> class c2 : public c1<t>
{
public:
void fn2(type_name x) {}
};
虽然以下是:
class c1
{
public:
typedef int type_name;
void fn1(type_name x) {}
};
class c2 : public c1
{
public:
void fn2(type_name x) {}
};
如您所见,唯一的区别是在第一种情况下,类是模板。 Gcc 和 Clang 抱怨 type_name 未在第二类中定义(仅在模板版本中)。 typedef不是从父类继承的吗?如果是这样,为什么它适用于非模板版本?使用模板中的 typedef 时是否有一些异常?
另外,我知道我可以使用完全限定的类型名称来完成这项工作,即“typename c1::type_name”。我只是想知道这是一些 C++ 限制还是编译器错误。
【问题讨论】:
-
嗯,模板类依赖于模板参数,不会自动转发。
标签: c++ templates inheritance typedef