Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从圆圈中引出笑脸_C++ - Fatal编程技术网

C++ 从圆圈中引出笑脸

C++ 从圆圈中引出笑脸,c++,C++,我试图从Circle中衍生出课堂笑脸: struct Smiley : Circle { void draw_lines() const; }; void Smiley::draw_lines() const { Circle::draw_lines(); // outline /*rest of code here*/ } 这是圆的定义: struct Circle : Shape { Circle(Point p, int rr); // center and

我试图从Circle中衍生出课堂笑脸:

struct Smiley : Circle {
  void draw_lines() const;
};

void Smiley::draw_lines() const {
  Circle::draw_lines();   // outline
  /*rest of code here*/
}
这是圆的定义:

struct Circle : Shape {
  Circle(Point p, int rr);    // center and radius

  void draw_lines() const;

  Point center() const;

  void set_radius(int rr) { set_point(0, Point(center().x - rr, center().y - rr)); r = rr; }
  int radius() const { return r; }
private:
  int r;
};
我基本上想要一个上面画有两个圆弧的圆。理论上,我应该只需要写
draw_lines()
over(在形状上定义为
virtual
),但如果没有构造函数,它什么也做不了,如果我有构造函数,它就会出错,并说Circle没有可用的默认构造函数,即使我在构造函数中没有与Circle相关的代码


有人知道我为什么会出现这个错误吗?

您已经为需要点和半径的圆定义了一个构造函数。您应该为
Smiley
定义一个具有相同参数的函数,该函数通过


您已经为需要点和半径的圆定义了构造函数。您应该为
Smiley
定义一个具有相同参数的函数,该函数通过


您已经为需要点和半径的圆定义了构造函数。您应该为
Smiley
定义一个具有相同参数的函数,该函数通过


您已经为需要点和半径的圆定义了构造函数。您应该为
Smiley
定义一个具有相同参数的函数,该函数通过


从没有默认构造函数的类继承时,必须确保调用非默认构造函数。

否则,派生类将尝试调用不存在的默认构造函数,如错误所示。在这种情况下,您可以直接传递相同的参数

struct Smiley : Circle {
  Smiley(Point p, int rr);
  void draw_lines() const;
};

Smiley::Smiley(Point p, int rr)
   : Circle(p, rr)
{};

我基本上想要一个上面画有两个圆弧的圆


那么它就不再是一个圆了,那么为什么
Smiley
继承
circle

当您从没有默认构造函数的类继承时,您必须确保调用非默认构造函数。

否则,派生类将尝试调用不存在的默认构造函数,如错误所示。在这种情况下,您可以直接传递相同的参数

struct Smiley : Circle {
  Smiley(Point p, int rr);
  void draw_lines() const;
};

Smiley::Smiley(Point p, int rr)
   : Circle(p, rr)
{};

我基本上想要一个上面画有两个圆弧的圆


那么它就不再是一个圆了,那么为什么
Smiley
继承
circle

当您从没有默认构造函数的类继承时,您必须确保调用非默认构造函数。

否则,派生类将尝试调用不存在的默认构造函数,如错误所示。在这种情况下,您可以直接传递相同的参数

struct Smiley : Circle {
  Smiley(Point p, int rr);
  void draw_lines() const;
};

Smiley::Smiley(Point p, int rr)
   : Circle(p, rr)
{};

我基本上想要一个上面画有两个圆弧的圆


那么它就不再是一个圆了,那么为什么
Smiley
继承
circle

当您从没有默认构造函数的类继承时,您必须确保调用非默认构造函数。

否则,派生类将尝试调用不存在的默认构造函数,如错误所示。在这种情况下,您可以直接传递相同的参数

struct Smiley : Circle {
  Smiley(Point p, int rr);
  void draw_lines() const;
};

Smiley::Smiley(Point p, int rr)
   : Circle(p, rr)
{};

我基本上想要一个上面画有两个圆弧的圆



那么它就不再是一个圆了,那么为什么
Smiley
继承
circle

编译器给出的错误是不言自明的……但是circle确实有一个构造函数,那么为什么我会得到这个错误呢?我只想直接从形状派生Smiley并重做实现细节,但作业(不是针对类,只是我自己学习)说从圆圈派生它。@user2509848:它有一个构造函数,是的,该构造函数需要参数。编译器给出的错误是不言自明的…但Circle确实有一个构造函数,所以为什么我会得到这个错误?我只想直接从形状派生Smiley并重做实现细节,但作业(不是针对类,只是我自己学习)说从圆圈派生它。@user2509848:它有一个构造函数,是的,该构造函数需要参数。编译器给出的错误是不言自明的…但Circle确实有一个构造函数,所以为什么我会得到这个错误?我只想直接从形状派生Smiley并重做实现细节,但作业(不是针对类,只是我自己学习)说从圆圈派生它。@user2509848:它有一个构造函数,是的,该构造函数需要参数。编译器给出的错误是不言自明的…但Circle确实有一个构造函数,所以为什么我会得到这个错误?我只想直接从形状派生Smiley并重做实现细节,但作业(不是针对类,只是我自己学习)说从圆圈派生它。@user2509848:它有一个构造函数,是的,该构造函数需要参数。你没有给它任何。这可以是更好的措辞,特别是考虑到你试图解释给一个新手。“你需要为Smiley定义一个相同的构造函数”是完全错误的。所以我只需要为这些问题定义一个空构造函数?@user2509848-构造函数不是“空的”。虽然它有一个空的代码体,但重要的是通过初始化列表初始化基类;“初始化列表”现在是一个重载术语。@LightnessRacesinOrbit。同意。多说些废话总是个好主意。(深深地叹了口气……)这可以用更好的措辞,尤其是考虑到你正试图向新手解释。“你需要为Smiley定义一个相同的构造函数”是完全错误的。所以我只需要为这些问题定义一个空构造函数?@user2509848-构造函数不是“空的”。虽然它有一个空的代码体,但重要的是它通过