2012-04-05 105 views
1

我正在尝试转发声明从模板类派生的类,该类也必须进行前向声明。如何转发声明从前向声明的模板基类派生的类?

这里是类的一个实例:

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; 

回答

5

只是向前申报类名:

class Derived; 

你不能在其声明中包含任何关于类的更多信息;基类,成员等只能在类定义中声明。

这个前向声明可以用来做各种事情,包括声明指针或引用(例如你的例子中的pDerived),也可以用Derived作为参数或返回类型声明函数。如果你需要做任何需要知道类的大小,基类或成员的事情,那么你需要完整的定义。

+0

你当然是对的,但是当我尝试并且失败时。这是我的错误,在forward声明中,我做了'namespace {class Derived};'然后'class Derived;'。显然,使用'namespace'来说某事没有命名空间不同于只是跳过'namespace',所以编译器告诉我这是不明确的。 – Solx 2012-04-05 16:34:26