1

我正在尝试实现定义为的抽象类“原始”

class Primitive
{
    virtual bool intersect(Ray& ray, float* thit, Intersection* in) = 0;
    virtual bool intersectP(Ray& ray) = 0;
    virtual void getBRDF(LocalGeo& local, BRDF* brdf) = 0;
};

我的问题是 Primitive 包含一个 Method intersect ,它使用 Intersection 类型,定义为

class Intersection
{
    LocalGeo localGeo;
    Primitive* primitive;
};

Intersection 有一个指向 Primitive 的链接。因此,我无法编译它,因为编译器给出了一个错误,即 Intersection 未定义,因为它出现在 Primitive 定义之后。

问题归结为...

class A
{
    void afunc(B *b);
};


class B
{
    A *a;   
}

有没有办法以这种方式定义类?我试图谷歌,但我不知道谷歌什么。

谢谢

4

2 回答 2

2

在头文件中使用前向声明:

class Intersection; // forward declaration

class Primitive { /* as before */ };

class Primitive; // forward declaration

class Intersection { /* as before */ };
于 2013-04-27T22:51:20.207 回答
0

您需要转发声明类B

class B;
class A
{
    void afunc(B *b);
};

应该修复编译。

于 2013-04-27T22:51:15.063 回答