我正在尝试转发声明一个派生自模板类的类,该类也必须是前向声明的。
以下是类的示例:
class TType {
public:
TType() { }
};
template<typename T>
class Base {
public:
Base() { }
};
class Derived : public Base<TType> {
public:
Derived() { }
};
这是对我需要的失败猜测:
class TType;
template<typename T> class Base;
class Derived : public Base<TType>; // This fails
Derived* pDerived;
答案 0 :(得分:5)
只需转发声明类名:
class Derived;
您不能在声明中包含有关课程的任何其他信息;基类,成员等只能在类定义中声明。
此前向声明可用于执行各种操作,包括声明指针或引用(例如示例中的pDerived
),以及使用Derived
声明函数作为参数或返回类型。如果您需要做任何需要知道类的大小,基类或成员的事情,那么您将需要完整的定义。