【发布时间】:2013-12-05 02:53:38
【问题描述】:
所以,我在循环依赖方面遇到了一个大问题。我的 Square.h 和 Circle.h 类都继承了 Shape.h,并使用双重调度来尝试检测两者之间的冲突。我的课程目前按以下方式设置
形状.h
class Shape {
public:
virtual bool detectCollision(Shape* obj) = 0;
virtual bool detectCollision(Square* obj) = 0;
virtual bool detectCollision(Circle* obj) = 0;
方形.h
#include "shape.h"
class Square : public Shape {
public:
bool detectCollision(Shape* obj);
bool detectCollision(Square* obj);
bool detectCollision(Circle* obj);
圆.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
【问题讨论】:
-
能否请您发布一些错误?
-
为什么你需要三个版本的
detectCollision?Shape *一个就够了吗? -
@razeh,我更新了一个错误 sn-p。
-
@NedStark shape 是不够的,因为正方形和正方形、圆形和正方形、圆形和圆形之间的碰撞检测都是不同的!
标签: c++ polymorphism circular-dependency double-dispatch