2010-01-28 79 views
0

我知道,我可以轉發聲明一個類,如下所示:如何轉發聲明一個C++類從另一個類繼承?

class Foo; 

// ... now I can use Foo* 

不過,我可以做這樣的事情:

class Bar { 
    public: 
    virtual void someFunc(); 
}; 
// ... somehow forward declare Class Foo as : public Bar here 
someFunc(Foo* foo) { 
    foo -> someFunc(); 
} 

class Foo: public Bar { 
} 

謝謝!

+0

爲了記錄,編譯錯誤是'使用未定義類型'struct Foo''。 – 2010-02-02 10:45:03

回答

4

您可以將聲明欄轉發爲class Bar;,並將someFunc的簽名更改爲Bar*作爲參數。由於someFunc()是基類中的虛擬方法,因此它應該可以工作。

1

你向前聲明Foo後成爲不完全類型,這將是不完整的,直到你提供的Foo定義。 雖然Foo是不完整的任何嘗試將指針取消引用到Foo是不合格的。所以要寫

foo->someFunc(); 

您需要提供Foo的定義。