简单的子类

时间:2015-04-13 20:39:28

标签: c++ oop

我最近在C ++中引入了面向对象编程的概念,我在派生类时需要帮助。我相信这个问题的解决方案是微不足道的,而且我不熟悉某些类的基础知识。

所以我有这个:

struct Circle : Shape
{
    /* ... */
}

......而且效果很好。我试图像这样继承Circle:

struct Smiley : Circle
{
    using Circle::Circle; // use Circle's constructors?
    /* ... */
}

当我尝试使用main()中的一些参数初始化Smiley时,我得到了这种类型的错误:

no instance of constructor "Graph_lib::Smiley::Smiley" matches the argument list

main()看起来像这样:     Smiley happy{ Point{ 300, 200 }, 100 };

当我将名字从Smiley替换为Circle时,一切正常。

Circle happy{ Point{ 300, 200 }, 100 }; // this is ok and working

这是Circle的声明:

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

    void draw_lines() const;

    Point center() const ; 
    int radius() const { return r; }
    void set_radius(int rr) { r=rr; }
private:
    int r;
};

有什么问题?

2 个答案:

答案 0 :(得分:0)

编译器是问题所在。我下载了2013年11月的编译器,现在一切正常。谢谢@ bames53

答案 1 :(得分:-1)

首先,struct和类之间存在细微差别。它主要是处理公共/私人,但有区别。您的问题来自"使用Circle :: Circle"。如果没有更详细的代码示例,我无法进行更多调试。但是,首先要看的是圈子构造函数的参数。如果你试图传递一个不同的类型,如果初始化参数(即char而不是int)到Smiley它就不会工作。