2011-05-15 87 views
1

有一個頭文件:聲明在類中定義的結構

class btCollisionWorld 
{ 
public: 

    struct RayResultCallback{ 
     int something; //example only 
    }; 
) 

我正在寫另一headeer文件,在這裏我想用指針btCollisionWorld ::RayResultCallback,但我不希望包括全btCollisionWorld.h(我將它包含在我的cpp文件中)

如何正確聲明它?

我已經試過這和它的失敗:

class btCollisionWorld; 
struct btCollisionWorld::ClosestRayResultCallback; 

回答

6

你不能聲明一個類中定義而不定義包含類的結構體。您可以使用命名空間來實現類似的目標。

0

這是唯一合理的,以保持從btCollisionWorld.h分隔,如果它並沒有真正依賴於特定的類btCollisionWorld這個其他文件,而只是一些類具有特定屬性,其btCollisionWorld滿足。在這種情況下,它可能是更好地保持通用的,那就是:不是使用btCollisionWorld*你可以做

template <typename btCollisionWorldT> 
whatever-kind-of-structure-it-is { 
    btCollisionWorldT * genericpointer; 
} 

如果結構是一類,你可以在以後typedef它使btCollisionWorldT是在每一個btCollisionWorld此類的實際實例。

或者,您可以使用void*,但這不太可能是理想的解決方案。

+0

謝謝,btCollisionWorld來自第三方庫,所以我不想將其更改爲不同的命名空間等。 我只是試圖通過刪除包含在另一個頭文件中的頭文件將編譯時間減少到最小。 – Dor 2011-05-16 21:55:06

+0

你確定忽略它確實會大大提高編譯時間嗎?第二個'#include'不應該比打開文件做得多,碰到包含'btCollisionWorld'已經包含在內的包含守護進程,因此再次關閉文件。 – leftaroundabout 2011-05-17 08:55:03