【问题标题】:Redefinition of class error重新定义类错误
【发布时间】:2013-03-26 22:47:20
【问题描述】:

我正在设计一个程序,它需要三个给定的点并计算第四个点来创建一个平行四边形。到目前为止我所拥有的是:

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

我的问题是:如果我从多边形类派生的方式正确吗?如果是这样,为什么会出现此错误?

【问题讨论】:

  • 您收到错误是因为您正在重新定义Parallelogram::Parallelogram(Point, Point, Point),就像编译器告诉您的那样。删除其中一个定义。
  • 编译器的信息似乎很清楚。您提供了同一个构造函数的两个实现。

标签: c++ graphics redefinition


【解决方案1】:

Parallelogram::Parallelogram(Point, Point, Point) 有两个定义;一个在课内,一个在课外。一个函数不能有多个定义。

假设add 为您的Polygon 添加了一个点,您似乎真的只是希望第二个定义成为第一个定义的一部分。你可以像这样在你的类中定义它:

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);
}

【讨论】:

  • 谢谢。通过查看一些标准类进行学习,并将示例误解为具有多个定义。
  • @Robotguy27 你及时接受了我的回答,让我在一天内获得了第一个超过 400 的声望。谢谢!
【解决方案2】:

修复 . . .

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)
}

只要确保函数在构造函数之前定义即可。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-27
    • 2014-11-01
    • 2020-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多