0

私は、与えられた3つのポイントを取り、4番目のポイントを計算して平行四辺形を作成するプログラムを設計しています。私がこれまでに持っているのは:

struct Parallelogram : public Polygon {
    Parallelogram(Point tl, Point tr, Point bl){
        Point br;
        int num = tr.y-tl.y;
        int denom = tr.x-tl.x;
        br.x=denom+bl.x;
        br.y=num+bl.y;
    }
};

Parallelogram::Parallelogram(Point tl, Point tr, Point bl)
{
    add(tl);
    add(tr);
    add(bl);
    add(br);
};

コンパイル時に次のエラーが発生します。

hw6pr2.cpp:15:1: error: redefinition of âParallelogram::Parallelogram(Point, Point, Point)â
hw6pr2.cpp:6:2: error: âParallelogram::Parallelogram(Point, Point, Point)â previously defined here

私の質問は、ポリゴンクラスから派生する方法が正しいかどうかです。もしそうなら、なぜ私はこのエラーが発生するのですか?

4

2 に答える 2

2

Parallelogram::Parallelogram(Point, Point, Point);には2つの定義があります。1つはクラス内、もう1つは外です。関数の定義を複数持つことはできません。

addにポイントを追加すると仮定するとPolygon、実際には2番目の定義を最初の定義の一部にしたいようです。クラス内で次のように定義できます。

struct Parallelogram : public Polygon {
  Parallelogram(Point tl, Point tr, Point bl) {
    Point br;
    int num = tr.y-tl.y;
    int denom = tr.x-tl.x;
    br.x=denom+bl.x;
    br.y=num+bl.y;

    add(tl);
    add(tr);
    add(bl);
    add(br);
  }
};

または、クラス内で宣言してから、外部で定義することもできます。

struct Parallelogram : public Polygon {
  Parallelogram(Point tl, Point tr, Point bl);
};

Parallelogram::Parallelogram(Point tl, Point tr, Point bl) {
  Point br;
  int num = tr.y-tl.y;
  int denom = tr.x-tl.x;
  br.x=denom+bl.x;
  br.y=num+bl.y;

  add(tl);
  add(tr);
  add(bl);
  add(br);
}
于 2013-03-26T22:52:41.200 に答える
0

修理 。。。

Parallelogram::AnyWordButParallelogram(Point tl, Point tr, Point bl)
{
add(tl);
add(tr);
...

そのコードを構築時に呼び出す必要がある場合(私が推測できるように)、次に。。

struct Parallelogram : public Polygon {
Parallelogram(Point tl, Point tr, Point bl){
    ...

    AnyWordButParallelogram(Point tl, Point tr, Point bl)
}

関数がコンストラクターの前に定義されていることを確認してください。

于 2013-03-26T22:51:15.267 に答える