有一个标题文件:
class btCollisionWorld
{
public:
struct RayResultCallback{
int something; //example only
};
)
我正在编写另一个headeer文件,我想使用指向btCollisionWorld
::RayResultCallback
的指针,但我不想包含整个btCollisionWorld.h
(我将它包含在我的cpp文件中)
如何正确申报?
我试过这个但它失败了:
class btCollisionWorld;
struct btCollisionWorld::ClosestRayResultCallback;
答案 0 :(得分:6)
如果没有定义包含类,则不能声明在类中定义的结构。您可以使用命名空间来实现类似的目标。
答案 1 :(得分:0)
将其他文件与btCollisionWorld.h
分开是唯一合理的,如果它不依赖于特定的类btCollisionWorld
,而只是在某些具有btCollisionWorld
的某些属性的类上满足。在这种情况下,最好保持它的通用性,即:而不是使用btCollisionWorld*
,你可能会这样做
template <typename btCollisionWorldT>
whatever-kind-of-structure-it-is {
btCollisionWorldT * genericpointer;
}
如果结构是一个类,您可以稍后typedef
,以便在此类的每个实际实例中btCollisionWorldT
为btCollisionWorld
。
或者您可以使用void*
,但这不太可能是理想的解决方案。