2012-04-05 100 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