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ます。その後、Visitorパターン、そのさまざまな実装と使用法について読んでください。それはあなたの問題を解決するのに役立ちます。CircleShape

于 2012-07-05T11:33:59.107 に答える
0

あなたのCircleクラスはから継承していないようですShape

これを試して:

class Circle : Shape
{

}
于 2012-07-05T11:35:00.177 に答える
0

これは、実際にはシェイプから派生していないために発生しています。

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