我不确定我是否也喜欢我的问题,但我会举一个例子来澄清事情。
以下是代码:
class Shape;
class Circle;
class Triangle;
class Shape
{
Shape(void);
~Shape(void);
virtual void DrawShape(void) = 0;
}
class Circle : public Shape
{
/* .... constructor/destructor defined normally .... */
bool TestIntersection(Triangle* _triangle);
bool TestIntersection(Circle* _circle);
void DrawShape(void);
}
/* main.cpp */
...
Shape* shape;
Shape* circle = new Circle;
if(a == 0)
{
shape = new Circle;
}
else
{
shape = new Triangle;
}
circle->TestIntersection(shape);
我收到的错误是没有可接受的从Shape *转换为Circle *或Triangle *。
为什么会这样?或者我是否需要一种方法来确定哪个派生类已设置为抽象类指针?
答案 0 :(得分:4)
你需要的是这个:
我注意到您没有从Shape
派生所谓的派生类。修复它也。也就是说,Triangle
和Circle
应该来自Shape
。之后,阅读有关访客模式,其各种实现和用法。这将有助于您解决问题。
答案 1 :(得分:0)
您的Circle
课程似乎并未继承Shape
:
试试这个:
class Circle : Shape
{
}
答案 2 :(得分:0)
这种情况正在发生,因为您实际上并非来自Shape。
class Circle: public Shape {
...
};