Итак, у меня большая проблема с круговой зависимостью. Мои классы Square.h и Circle.h наследуют Shape.h и используют двойную отправку, чтобы попытаться обнаружить столкновение между ними. Мои классы В настоящее время установлены в следующих рода модыC++ Полиморфная циркулярная зависимость с двойной отправкой
Shape.h
class Shape {
public:
virtual bool detectCollision(Shape* obj) = 0;
virtual bool detectCollision(Square* obj) = 0;
virtual bool detectCollision(Circle* obj) = 0;
Square.h
#include "shape.h"
class Square : public Shape {
public:
bool detectCollision(Shape* obj);
bool detectCollision(Square* obj);
bool detectCollision(Circle* obj);
Circle.h
#include "shape.h"
class Circle: public Shape {
public:
bool detectCollision(Shape* obj);
bool detectCollision(Square* obj);
bool detectCollision(Circle* obj);
По сути я хотел чтобы сделать что-то похожее на
Circle circle;
Square square;
Square square2;
circle.detectCollision(&square);
square.detectCollision(&square2);
Но я пытаюсь скомпилировать это несколько ошибок. Очевидно, в том числе «Circle.h», внутри Square.h вызывается круговой цикл, который не будет выполняться. Может ли кто-нибудь предложить хорошее решение для этой проблемы?
Очевидно, что обнаружение столкновений между двумя квадратами и кругом и квадратом отличается, поэтому мне нужно как-то перегрузить эти методы. Я думал, что это будет хорошее решение, любые указатели?
ошибки (Эти ошибки компиляции являются одинаковыми или Square.cpp и Shape.cpp):
Circle.cpp
shape.h(12): error C2061: syntax error : identifier 'Square'
shape.h(13): error C2061: syntax error : identifier 'Circle'
shape.h(13): error C2535: 'bool Shape::detectCollision(void)' : member function already defined or declared
Не могли бы вы опубликовать некоторые ошибки? – razeh
Почему вам нужны три версии 'detectCollision'? Should'nt 'Shape * 'достаточно? –
@razeh, я обновил фрагмент ошибки. –