【发布时间】:2015-04-13 20:39:27
【问题描述】:
我最近了解了 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;
};
有什么问题?
【问题讨论】:
-
可以把代码发到
main()吗? -
Smiley happy{ Point{ 300, 200 }, 100 };,当我用 Circle 替换 Smiley 时,它工作正常。 -
给我们一个行为重现的最小例子。
-
您似乎正在使用的语言功能是 Constructor Inheritance,乍一看您的设置可能是正确的,但不知道
Circle的实际构造函数以及您如何构建您的Smiley无法判断。此外,包括您的工具链信息将是您问题的一个不错的补充,同时添加反映您的问题的准确来源。 See example. -
无论您遇到什么问题,都可能是您未向我们展示的代码中的问题,或者是您未告诉我们的其他问题,例如您使用的编译器版本。跨度>