我最近在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;
};
有什么问题?
答案 0 :(得分:0)
编译器是问题所在。我下载了2013年11月的编译器,现在一切正常。谢谢@ bames53
答案 1 :(得分:-1)
首先,struct和类之间存在细微差别。它主要是处理公共/私人,但有区别。您的问题来自"使用Circle :: Circle"。如果没有更详细的代码示例,我无法进行更多调试。但是,首先要看的是圈子构造函数的参数。如果你试图传递一个不同的类型,如果初始化参数(即char而不是int)到Smiley它就不会工作。