0

我不确定我是否像我喜欢的那样表达了我的问题,但我会举一个例子来澄清问题。

这是代码:

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* 的转换。

为什么会这样?或者我是否需要一种方法来确定已将哪个派生类设置为抽象类指针?

4

3 回答 3

4

你需要的基本上是这样的:

我注意到您没有Shape. 也解决这个问题。也就是说,Triangle并且Circle应该派生自Shape。之后,阅读访问者模式、它的各种实现和用法。这将帮助您解决问题。

于 2012-07-05T11:33:59.107 回答
0

您的Circle班级似乎没有继承自Shape

尝试这个:

class Circle : Shape
{

}
于 2012-07-05T11:35:00.177 回答
0

发生这种情况是因为您实际上并未从 Shape 派生。

class Circle: public Shape {
...
};
于 2012-07-05T11:35:17.290 回答