2013-04-27 3 views
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; 
}; 

Моя проблема заключается в том, что Примитив содержит метод пересекаются, который использует тип Пересечения который определяется как

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

Intersection имеет ссылка на примитив. Таким образом, я не могу скомпилировать это, поскольку компилятор сообщает об ошибке, что Intersection не определяется так, как это происходит после определения Primitive.

Проблема сводится к ...

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


class B 
{ 
    A *a; 
} 

есть способ определить классы таким образом? Я пытался Google, но я не был уверен, что делать с Google.

Благодаря

+0

вперед декларируют 'Intersection'. – lapk

ответ

2

Использование форвардных деклараций в файлах заголовка:

class Intersection; // forward declaration 

class Primitive { /* as before */ }; 

и

class Primitive; // forward declaration 

class Intersection { /* as before */ }; 
+0

Спасибо. Это сработало. – AnilMS

0

Вам необходимо переслать DECLARE класс B

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

Должно исправить компиляции.

+0

Спасибо. Это устранило проблему. – AnilMS

Смежные вопросы